Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google 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 are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 605 } | 605 } |
| 606 } | 606 } |
| 607 | 607 |
| 608 AlignedOperands alignedOperands; | 608 AlignedOperands alignedOperands; |
| 609 alignedOperands.exponent = exponent; | 609 alignedOperands.exponent = exponent; |
| 610 alignedOperands.lhsCoefficient = lhsCoefficient; | 610 alignedOperands.lhsCoefficient = lhsCoefficient; |
| 611 alignedOperands.rhsCoefficient = rhsCoefficient; | 611 alignedOperands.rhsCoefficient = rhsCoefficient; |
| 612 return alignedOperands; | 612 return alignedOperands; |
| 613 } | 613 } |
| 614 | 614 |
| 615 // Returns true if the 'n' least significant digits of | |
| 616 // the coefficient are all zero. | |
| 617 static bool digitsAllZero(uint64_t coefficient, int n) | |
|
yosin_UTC9
2013/11/18 03:48:28
How about this?
static bool isMultipleOfTenPowerN
sof
2013/11/18 06:48:27
Yes, clearer too. Done + took the opportunity to s
| |
| 618 { | |
| 619 ASSERT(n >= 0); | |
| 620 while (n > 0) { | |
| 621 if (coefficient % 10) { | |
| 622 return false; | |
| 623 } | |
| 624 coefficient /= 10; | |
| 625 n--; | |
|
yosin_UTC9
2013/11/18 03:48:28
nit: --n
Other parts of this file use prefix decre
| |
| 626 } | |
| 627 return true; | |
| 628 } | |
| 629 | |
| 615 // Round toward positive infinity. | 630 // Round toward positive infinity. |
| 616 // Note: Mac ports defines ceil(x) as wtf_ceil(x), so we can't use name "ceil" h ere. | 631 // Note: Mac ports defines ceil(x) as wtf_ceil(x), so we can't use name "ceil" h ere. |
| 617 Decimal Decimal::ceiling() const | 632 Decimal Decimal::ceiling() const |
| 618 { | 633 { |
| 619 if (isSpecial()) | 634 if (isSpecial()) |
| 620 return *this; | 635 return *this; |
| 621 | 636 |
| 622 if (exponent() >= 0) | 637 if (exponent() >= 0) |
| 623 return *this; | 638 return *this; |
| 624 | 639 |
| 625 uint64_t result = m_data.coefficient(); | 640 uint64_t result = m_data.coefficient(); |
| 626 const int numberOfDigits = countDigits(result); | 641 const int numberOfDigits = countDigits(result); |
| 627 const int numberOfDropDigits = -exponent(); | 642 const int numberOfDropDigits = -exponent(); |
| 628 if (numberOfDigits < numberOfDropDigits) | 643 if (numberOfDigits < numberOfDropDigits) |
| 629 return isPositive() ? Decimal(1) : zero(Positive); | 644 return isPositive() ? Decimal(1) : zero(Positive); |
| 630 | 645 |
| 631 result = scaleDown(result, numberOfDropDigits - 1); | 646 result = scaleDown(result, numberOfDropDigits); |
| 632 if (sign() == Positive && result % 10 > 0) | 647 if (isPositive() && !digitsAllZero(m_data.coefficient(), numberOfDropDigits) ) |
| 633 result += 10; | 648 result++; |
|
yosin_UTC9
2013/11/18 03:48:28
nit: ++result
Other parts of this file use prefix
sof
2013/11/18 06:48:27
Done.
| |
| 634 result /= 10; | |
| 635 return Decimal(sign(), 0, result); | 649 return Decimal(sign(), 0, result); |
| 636 } | 650 } |
| 637 | 651 |
| 638 Decimal Decimal::compareTo(const Decimal& rhs) const | 652 Decimal Decimal::compareTo(const Decimal& rhs) const |
| 639 { | 653 { |
| 640 const Decimal result(*this - rhs); | 654 const Decimal result(*this - rhs); |
| 641 switch (result.m_data.formatClass()) { | 655 switch (result.m_data.formatClass()) { |
| 642 case EncodedData::ClassInfinity: | 656 case EncodedData::ClassInfinity: |
| 643 return result.isNegative() ? Decimal(-1) : Decimal(1); | 657 return result.isNegative() ? Decimal(-1) : Decimal(1); |
| 644 | 658 |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 663 | 677 |
| 664 if (exponent() >= 0) | 678 if (exponent() >= 0) |
| 665 return *this; | 679 return *this; |
| 666 | 680 |
| 667 uint64_t result = m_data.coefficient(); | 681 uint64_t result = m_data.coefficient(); |
| 668 const int numberOfDigits = countDigits(result); | 682 const int numberOfDigits = countDigits(result); |
| 669 const int numberOfDropDigits = -exponent(); | 683 const int numberOfDropDigits = -exponent(); |
| 670 if (numberOfDigits < numberOfDropDigits) | 684 if (numberOfDigits < numberOfDropDigits) |
| 671 return isPositive() ? zero(Positive) : Decimal(-1); | 685 return isPositive() ? zero(Positive) : Decimal(-1); |
| 672 | 686 |
| 673 result = scaleDown(result, numberOfDropDigits - 1); | 687 result = scaleDown(result, numberOfDropDigits); |
| 674 if (isNegative() && result % 10 > 0) | 688 if (isNegative() && !digitsAllZero(m_data.coefficient(), numberOfDropDigits) ) |
| 675 result += 10; | 689 result++; |
|
yosin_UTC9
2013/11/18 03:48:28
nit: ++result
Other parts of this file use prefix
sof
2013/11/18 06:48:27
Done.
| |
| 676 result /= 10; | |
| 677 return Decimal(sign(), 0, result); | 690 return Decimal(sign(), 0, result); |
| 678 } | 691 } |
| 679 | 692 |
| 680 Decimal Decimal::fromDouble(double doubleValue) | 693 Decimal Decimal::fromDouble(double doubleValue) |
| 681 { | 694 { |
| 682 if (std::isfinite(doubleValue)) | 695 if (std::isfinite(doubleValue)) |
| 683 return fromString(String::numberToStringECMAScript(doubleValue)); | 696 return fromString(String::numberToStringECMAScript(doubleValue)); |
| 684 | 697 |
| 685 if (std::isinf(doubleValue)) | 698 if (std::isinf(doubleValue)) |
| 686 return infinity(doubleValue < 0 ? Negative : Positive); | 699 return infinity(doubleValue < 0 ? Negative : Positive); |
| (...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1025 } | 1038 } |
| 1026 return builder.toString(); | 1039 return builder.toString(); |
| 1027 } | 1040 } |
| 1028 | 1041 |
| 1029 Decimal Decimal::zero(Sign sign) | 1042 Decimal Decimal::zero(Sign sign) |
| 1030 { | 1043 { |
| 1031 return Decimal(EncodedData(sign, EncodedData::ClassZero)); | 1044 return Decimal(EncodedData(sign, EncodedData::ClassZero)); |
| 1032 } | 1045 } |
| 1033 | 1046 |
| 1034 } // namespace WebCore | 1047 } // namespace WebCore |
| OLD | NEW |