Lines Matching refs:radix
133 JSTaggedValue NumberHelper::Int32ToString(JSThread *thread, int32_t number, uint32_t radix)
139 if (n < radix) {
153 temp = temp / radix;
162 digit = n % radix;
163 n /= radix;
174 JSTaggedValue NumberHelper::DoubleToString(JSThread *thread, double number, int radix)
197 fraction *= radix;
198 delta *= radix;
205 buffer[fractionEnd] = Carry(buffer[fractionEnd], radix);
208 buffer[fractionEnd - 1] = Carry(buffer[fractionEnd - 1], radix);
227 ASSERT(radix >= MIN_RADIX && radix <= MAX_RADIX);
228 while (Exponent(integer / radix) > 0) {
229 integer /= radix;
233 double remainder = std::fmod(integer, radix);
235 integer = (integer - remainder) / radix;
558 JSTaggedValue NumberHelper::StringToNumber(EcmaString *string, int32_t radix)
561 if ((radix == base::DECIMAL || radix == 0)) {
573 JSTaggedValue result = NumberHelper::StringToDoubleWithRadix(str.begin(), str.end(), radix, &negative);
580 JSTaggedValue NumberHelper::StringToDoubleWithRadix(const uint8_t *start, const uint8_t *end, int radix, bool *negative)
601 if (radix != 0) {
602 if (radix < MIN_RADIX || radix > MAX_RADIX) {
605 if (radix != HEXADECIMAL) {
609 radix = DECIMAL;
616 radix = HEXADECIMAL;
631 uint32_t m = multiplier * static_cast<uint32_t>(radix);
637 if (currentBit >= radix) {
642 part = part * radix + currentBit;
661 char NumberHelper::Carry(char current, int radix)
664 digit = (digit == (radix - 1)) ? 0 : digit + 1;
668 CString NumberHelper::IntegerToString(double number, int radix)
670 ASSERT(radix >= MIN_RADIX && radix <= MAX_RADIX);
672 while (number / radix > MAX_MANTISSA) {
673 number /= radix;
677 double remainder = std::fmod(number, radix);
679 number = (number - remainder) / radix;
888 double NumberHelper::StringToDouble(const uint8_t *start, const uint8_t *end, uint8_t radix, uint32_t flags)
923 // 4. get number radix
926 if (*p == '0' && radix == 0) {
937 radix = HEXADECIMAL;
947 radix = OCTAL;
957 radix = BINARY;
963 if (radix == 0) {
964 radix = DECIMAL;
974 uint64_t numberMax = (UINT64_MAX - (radix - 1)) / radix;
979 if (c >= radix) {
988 intNumber = intNumber * radix + c;
1003 // 7. deal with other radix except DECIMAL
1004 if (p == end || radix != DECIMAL) {
1009 return number * std::pow(radix, exponent);
1014 if (radix == DECIMAL && *p == '.') {
1016 (number * std::pow(radix, exponent)) : NAN_VALUE);
1017 while (ToDigit(*p) < radix) {
1035 if (radix == DECIMAL && (p != end && (*p == 'e' || *p == 'E'))) {
1044 while ((digit = ToDigit(*p)) < radix) {
1045 if (additionalExponent > static_cast<int>(MAX_EXPONENT / radix)) {
1048 additionalExponent = additionalExponent * static_cast<int>(radix) + static_cast<int>(digit);
1071 // 11. convert none-prefix radix string
1072 return Strtod(buffer.c_str(), exponent, radix);
1075 double NumberHelper::Strtod(const char *str, int exponent, uint8_t radix)
1078 ASSERT(radix >= base::MIN_RADIX && radix <= base::MAX_RADIX);
1082 uint64_t numberMax = (UINT64_MAX - (radix - 1)) / radix;
1093 if (digit >= radix) {
1097 number = number * radix + digit;
1106 double powVal = ((radix == DECIMAL) && (exponentAbs < POWERS_OF_TEN_SIZE)) ?
1107 POWERS_OF_TEN[exponentAbs] : std::pow(radix, exponentAbs);
1181 // 4. get bigint radix
1182 uint8_t radix = DECIMAL;
1192 radix = HEXADECIMAL;
1198 radix = OCTAL;
1204 radix = BINARY;
1218 if (c < radix) {
1230 return BigIntHelper::SetBigInt(thread, "-" + buffer, radix).GetTaggedValue();
1232 return BigIntHelper::SetBigInt(thread, buffer, radix).GetTaggedValue();