Sun*_*nny 4 c c++ floating-point-precision
我想执行一些计算,我希望结果正确到一些小数位,比如12.所以我写了一个样本:
#define PI 3.1415926535897932384626433832795028841971693993751
double d, k, h;
k = 999999/(2*PI);
h = 999999;
d = PI*k*k*h;
printf("%.12f\n", d);
Run Code Online (Sandbox Code Playgroud)
但它给出了输出:
79577232813771760.000000000000
Run Code Online (Sandbox Code Playgroud)
我甚至使用了setprecision(),但相同的答案却是指数形式.
cout<<setprecision(12)<<d<<endl;
Run Code Online (Sandbox Code Playgroud)
版画
7.95772328138e+16
Run Code Online (Sandbox Code Playgroud)
使用长双,但徒劳无功.
除了在long long int类型中分别存储整数部分和小数部分之外,还有什么办法吗?
如果是这样,可以做些什么来准确得到答案?
双精度只有大约16位十进制数.小数点后的所有内容都是无稽之谈.(事实上,该点的最后一个数字或两个数字可能与无限精度计算不一致.)
AFAIK长双不标准化.可能是在您的系统上它与double相同,或者不再精确.这会让我感到有些惊讶,但它并没有违反任何规定.