OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 ReadDiyFp(buffer, &input, &remaining_decimals); | 257 ReadDiyFp(buffer, &input, &remaining_decimals); |
258 // Since we may have dropped some digits the input is not accurate. | 258 // Since we may have dropped some digits the input is not accurate. |
259 // If remaining_decimals is different than 0 than the error is at most | 259 // If remaining_decimals is different than 0 than the error is at most |
260 // .5 ulp (unit in the last place). | 260 // .5 ulp (unit in the last place). |
261 // We don't want to deal with fractions and therefore keep a common | 261 // We don't want to deal with fractions and therefore keep a common |
262 // denominator. | 262 // denominator. |
263 const int kDenominatorLog = 3; | 263 const int kDenominatorLog = 3; |
264 const int kDenominator = 1 << kDenominatorLog; | 264 const int kDenominator = 1 << kDenominatorLog; |
265 // Move the remaining decimals into the exponent. | 265 // Move the remaining decimals into the exponent. |
266 exponent += remaining_decimals; | 266 exponent += remaining_decimals; |
267 int error = (remaining_decimals == 0 ? 0 : kDenominator / 2); | 267 int64_t error = (remaining_decimals == 0 ? 0 : kDenominator / 2); |
268 | 268 |
269 int old_e = input.e(); | 269 int old_e = input.e(); |
270 input.Normalize(); | 270 input.Normalize(); |
271 error <<= old_e - input.e(); | 271 error <<= old_e - input.e(); |
272 | 272 |
273 ASSERT(exponent <= PowersOfTenCache::kMaxDecimalExponent); | 273 ASSERT(exponent <= PowersOfTenCache::kMaxDecimalExponent); |
274 if (exponent < PowersOfTenCache::kMinDecimalExponent) { | 274 if (exponent < PowersOfTenCache::kMinDecimalExponent) { |
275 *result = 0.0; | 275 *result = 0.0; |
276 return true; | 276 return true; |
277 } | 277 } |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
436 if (DoubleStrtod(trimmed, exponent, &guess) || | 436 if (DoubleStrtod(trimmed, exponent, &guess) || |
437 DiyFpStrtod(trimmed, exponent, &guess)) { | 437 DiyFpStrtod(trimmed, exponent, &guess)) { |
438 return guess; | 438 return guess; |
439 } | 439 } |
440 return BignumStrtod(trimmed, exponent, guess); | 440 return BignumStrtod(trimmed, exponent, guess); |
441 } | 441 } |
442 | 442 |
443 } // namespace double_conversion | 443 } // namespace double_conversion |
444 | 444 |
445 } // namespace WTF | 445 } // namespace WTF |
OLD | NEW |