Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Side by Side Diff: third_party/WebKit/Source/wtf/MathExtras.h

Issue 2386843002: reflow comments in wtf (Closed)
Patch Set: comments (heh!) Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 55
56 const double piOverFourDouble = M_PI_4; 56 const double piOverFourDouble = M_PI_4;
57 const float piOverFourFloat = static_cast<float>(M_PI_4); 57 const float piOverFourFloat = static_cast<float>(M_PI_4);
58 58
59 const double twoPiDouble = piDouble * 2.0; 59 const double twoPiDouble = piDouble * 2.0;
60 const float twoPiFloat = piFloat * 2.0f; 60 const float twoPiFloat = piFloat * 2.0f;
61 61
62 #if OS(ANDROID) || COMPILER(MSVC) 62 #if OS(ANDROID) || COMPILER(MSVC)
63 // ANDROID and MSVC's math.h does not currently supply log2 or log2f. 63 // ANDROID and MSVC's math.h does not currently supply log2 or log2f.
64 inline double log2(double num) { 64 inline double log2(double num) {
65 // This constant is roughly M_LN2, which is not provided by default on Windows and Android. 65 // This constant is roughly M_LN2, which is not provided by default on Windows
66 // and Android.
66 return log(num) / 0.693147180559945309417232121458176568; 67 return log(num) / 0.693147180559945309417232121458176568;
67 } 68 }
68 69
69 inline float log2f(float num) { 70 inline float log2f(float num) {
70 // This constant is roughly M_LN2, which is not provided by default on Windows and Android. 71 // This constant is roughly M_LN2, which is not provided by default on Windows
72 // and Android.
71 return logf(num) / 0.693147180559945309417232121458176568f; 73 return logf(num) / 0.693147180559945309417232121458176568f;
72 } 74 }
73 #endif 75 #endif
74 76
75 #if COMPILER(MSVC) 77 #if COMPILER(MSVC)
76 78
77 // VS2013 has most of the math functions now, but we still need to work 79 // VS2013 has most of the math functions now, but we still need to work
78 // around various differences in behavior of Inf. 80 // around various differences in behavior of Inf.
79 81
80 // Work around a bug in Win, where atan2(+-infinity, +-infinity) yields NaN inst ead of specific values. 82 // Work around a bug in Win, where atan2(+-infinity, +-infinity) yields NaN
83 // instead of specific values.
81 inline double wtf_atan2(double x, double y) { 84 inline double wtf_atan2(double x, double y) {
82 double posInf = std::numeric_limits<double>::infinity(); 85 double posInf = std::numeric_limits<double>::infinity();
83 double negInf = -std::numeric_limits<double>::infinity(); 86 double negInf = -std::numeric_limits<double>::infinity();
84 double nan = std::numeric_limits<double>::quiet_NaN(); 87 double nan = std::numeric_limits<double>::quiet_NaN();
85 88
86 double result = nan; 89 double result = nan;
87 90
88 if (x == posInf && y == posInf) 91 if (x == posInf && y == posInf)
89 result = piOverFourDouble; 92 result = piOverFourDouble;
90 else if (x == posInf && y == negInf) 93 else if (x == posInf && y == negInf)
91 result = 3 * piOverFourDouble; 94 result = 3 * piOverFourDouble;
92 else if (x == negInf && y == posInf) 95 else if (x == negInf && y == posInf)
93 result = -piOverFourDouble; 96 result = -piOverFourDouble;
94 else if (x == negInf && y == negInf) 97 else if (x == negInf && y == negInf)
95 result = -3 * piOverFourDouble; 98 result = -3 * piOverFourDouble;
96 else 99 else
97 result = ::atan2(x, y); 100 result = ::atan2(x, y);
98 101
99 return result; 102 return result;
100 } 103 }
101 104
102 // Work around a bug in the Microsoft CRT, where fmod(x, +-infinity) yields NaN instead of x. 105 // Work around a bug in the Microsoft CRT, where fmod(x, +-infinity) yields NaN
106 // instead of x.
103 inline double wtf_fmod(double x, double y) { 107 inline double wtf_fmod(double x, double y) {
104 return (!std::isinf(x) && std::isinf(y)) ? x : fmod(x, y); 108 return (!std::isinf(x) && std::isinf(y)) ? x : fmod(x, y);
105 } 109 }
106 110
107 // Work around a bug in the Microsoft CRT, where pow(NaN, 0) yields NaN instead of 1. 111 // Work around a bug in the Microsoft CRT, where pow(NaN, 0) yields NaN instead
112 // of 1.
108 inline double wtf_pow(double x, double y) { 113 inline double wtf_pow(double x, double y) {
109 return y == 0 ? 1 : pow(x, y); 114 return y == 0 ? 1 : pow(x, y);
110 } 115 }
111 116
112 #define atan2(x, y) wtf_atan2(x, y) 117 #define atan2(x, y) wtf_atan2(x, y)
113 #define fmod(x, y) wtf_fmod(x, y) 118 #define fmod(x, y) wtf_fmod(x, y)
114 #define pow(x, y) wtf_pow(x, y) 119 #define pow(x, y) wtf_pow(x, y)
115 120
116 #endif // COMPILER(MSVC) 121 #endif // COMPILER(MSVC)
117 122
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 fmod(trunc(d), std::numeric_limits<unsigned long long>::max() + 1.0); 409 fmod(trunc(d), std::numeric_limits<unsigned long long>::max() + 1.0);
405 if (fmodValue >= 0) { 410 if (fmodValue >= 0) {
406 // 0 <= fmodValue < 2^{64}. 411 // 0 <= fmodValue < 2^{64}.
407 // 0 <= value < 2^{64}. This cast causes no loss. 412 // 0 <= value < 2^{64}. This cast causes no loss.
408 value = static_cast<unsigned long long>(fmodValue); 413 value = static_cast<unsigned long long>(fmodValue);
409 } else { 414 } else {
410 // -2^{64} < fmodValue < 0. 415 // -2^{64} < fmodValue < 0.
411 // 0 < fmodValueInUnsignedLongLong < 2^{64}. This cast causes no loss. 416 // 0 < fmodValueInUnsignedLongLong < 2^{64}. This cast causes no loss.
412 unsigned long long fmodValueInUnsignedLongLong = 417 unsigned long long fmodValueInUnsignedLongLong =
413 static_cast<unsigned long long>(-fmodValue); 418 static_cast<unsigned long long>(-fmodValue);
414 // -1 < (std::numeric_limits<unsigned long long>::max() - fmodValueInUnsig nedLongLong) < 2^{64} - 1. 419 // -1 < (std::numeric_limits<unsigned long long>::max() -
420 // fmodValueInUnsignedLongLong)
421 // < 2^{64} - 1.
415 // 0 < value < 2^{64}. 422 // 0 < value < 2^{64}.
416 value = std::numeric_limits<unsigned long long>::max() - 423 value = std::numeric_limits<unsigned long long>::max() -
417 fmodValueInUnsignedLongLong + 1; 424 fmodValueInUnsignedLongLong + 1;
418 } 425 }
419 } 426 }
420 } 427 }
421 428
422 namespace WTF { 429 namespace WTF {
423 430
424 inline unsigned fastLog2(unsigned i) { 431 inline unsigned fastLog2(unsigned i) {
425 unsigned log2 = 0; 432 unsigned log2 = 0;
426 if (i & (i - 1)) 433 if (i & (i - 1))
427 log2 += 1; 434 log2 += 1;
428 if (i >> 16) 435 if (i >> 16)
429 log2 += 16, i >>= 16; 436 log2 += 16, i >>= 16;
430 if (i >> 8) 437 if (i >> 8)
431 log2 += 8, i >>= 8; 438 log2 += 8, i >>= 8;
432 if (i >> 4) 439 if (i >> 4)
433 log2 += 4, i >>= 4; 440 log2 += 4, i >>= 4;
434 if (i >> 2) 441 if (i >> 2)
435 log2 += 2, i >>= 2; 442 log2 += 2, i >>= 2;
436 if (i >> 1) 443 if (i >> 1)
437 log2 += 1; 444 log2 += 1;
438 return log2; 445 return log2;
439 } 446 }
440 447
441 } // namespace WTF 448 } // namespace WTF
442 449
443 #endif // #ifndef WTF_MathExtras_h 450 #endif // #ifndef WTF_MathExtras_h
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/wtf/ListHashSetTest.cpp ('k') | third_party/WebKit/Source/wtf/MathExtrasTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698