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));