Mercurial > hg > CbC > CbC_llvm
comparison flang/lib/Decimal/binary-to-decimal.cpp @ 236:c4bab56944e8 llvm-original
LLVM 16
author | kono |
---|---|
date | Wed, 09 Nov 2022 17:45:10 +0900 |
parents | 79ff65ed7e25 |
children |
comparison
equal
deleted
inserted
replaced
232:70dce7da266c | 236:c4bab56944e8 |
---|---|
7 //===----------------------------------------------------------------------===// | 7 //===----------------------------------------------------------------------===// |
8 | 8 |
9 #include "big-radix-floating-point.h" | 9 #include "big-radix-floating-point.h" |
10 #include "flang/Decimal/decimal.h" | 10 #include "flang/Decimal/decimal.h" |
11 #include <cassert> | 11 #include <cassert> |
12 #include <cfloat> | |
12 #include <string> | 13 #include <string> |
13 | 14 |
14 namespace Fortran::decimal { | 15 namespace Fortran::decimal { |
15 | 16 |
16 template <int PREC, int LOG10RADIX> | 17 template <int PREC, int LOG10RADIX> |
308 Binary more{x}; | 309 Binary more{x}; |
309 if (!x.IsMaximalFiniteMagnitude()) { | 310 if (!x.IsMaximalFiniteMagnitude()) { |
310 more.Next(); | 311 more.Next(); |
311 } | 312 } |
312 number.Minimize(Big{less, rounding}, Big{more, rounding}); | 313 number.Minimize(Big{less, rounding}, Big{more, rounding}); |
313 } else { | |
314 } | 314 } |
315 return number.ConvertToDecimal(buffer, size, flags, digits); | 315 return number.ConvertToDecimal(buffer, size, flags, digits); |
316 } | 316 } |
317 } | 317 } |
318 | 318 |
348 enum FortranRounding rounding, double x) { | 348 enum FortranRounding rounding, double x) { |
349 return Fortran::decimal::ConvertToDecimal(buffer, size, flags, digits, | 349 return Fortran::decimal::ConvertToDecimal(buffer, size, flags, digits, |
350 rounding, Fortran::decimal::BinaryFloatingPointNumber<53>(x)); | 350 rounding, Fortran::decimal::BinaryFloatingPointNumber<53>(x)); |
351 } | 351 } |
352 | 352 |
353 #if LONG_DOUBLE == 80 | 353 #if LDBL_MANT_DIG == 64 |
354 ConversionToDecimalResult ConvertLongDoubleToDecimal(char *buffer, | 354 ConversionToDecimalResult ConvertLongDoubleToDecimal(char *buffer, |
355 std::size_t size, enum DecimalConversionFlags flags, int digits, | 355 std::size_t size, enum DecimalConversionFlags flags, int digits, |
356 enum FortranRounding rounding, long double x) { | 356 enum FortranRounding rounding, long double x) { |
357 return Fortran::decimal::ConvertToDecimal(buffer, size, flags, digits, | 357 return Fortran::decimal::ConvertToDecimal(buffer, size, flags, digits, |
358 rounding, Fortran::decimal::BinaryFloatingPointNumber<64>(x)); | 358 rounding, Fortran::decimal::BinaryFloatingPointNumber<64>(x)); |
359 } | 359 } |
360 #elif LONG_DOUBLE == 128 | 360 #elif LDBL_MANT_DIG == 113 |
361 ConversionToDecimalResult ConvertLongDoubleToDecimal(char *buffer, | 361 ConversionToDecimalResult ConvertLongDoubleToDecimal(char *buffer, |
362 std::size_t size, enum DecimalConversionFlags flags, int digits, | 362 std::size_t size, enum DecimalConversionFlags flags, int digits, |
363 enum FortranRounding rounding, long double x) { | 363 enum FortranRounding rounding, long double x) { |
364 return Fortran::decimal::ConvertToDecimal(buffer, size, flags, digits, | 364 return Fortran::decimal::ConvertToDecimal(buffer, size, flags, digits, |
365 rounding, Fortran::decimal::BinaryFloatingPointNumber<113>(x)); | 365 rounding, Fortran::decimal::BinaryFloatingPointNumber<113>(x)); |