bla*_*zio 1 c++ precision boost boost-multiprecision
我想将数字 123456789.123456789 乘以 1000000000.0,作为此操作的结果,我期望 123456789123456789 作为 int 或 float 123456789123456789.0,但我得到:
res: 123456789123456791.04328155517578125
int_res: 123456789123456791
Run Code Online (Sandbox Code Playgroud)
我应该用其他方式来做吗?
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>
namespace bmp = boost::multiprecision;
int main()
{
bmp::cpp_dec_float_100 scalar{1000000000.0};
bmp::cpp_dec_float_100 a{123456789.123456789};
bmp::cpp_dec_float_100 res = a * scalar;
bmp::cpp_int int_res = res.convert_to<bmp::cpp_int>();
std::cout << " res: " << res.str() << std::endl;
std::cout << "int_res: " << int_res.str() << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码: https: //wandbox.org/permlink/xB8yBWuzzGvQugg7
请参阅https://www.boost.org/doc/libs/1_79_0/libs/multi precision/doc/ html/boost_multi precision/tut/floats/fp_eg/floatbuiltinctor.html 。
您正在a用double文字进行初始化。123456789.123456789不能用 a 表示,double因此您得到最接近的近似值123456789.12345679104328155517578125。如果您想精确初始化,请使用字符串文字:
bmp::cpp_dec_float_100 a{"123456789.123456789"};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
224 次 |
| 最近记录: |