我试图以给定的精度打印数字的平方根。
int N;
int precision;
cin>>N>>precision;
printf("%.*lf",precision,std::sqrt(N));
这是 clang++ 打印出来的:
%./a.out
2 100
1.4142135623730951454746218587388284504413604736328125000000000000000000000000000000000000000000000000
它能够打印超过 50 位的精度?我以为双打只能处理 17 位数字?
我在苹果硅 m1 上运行 clang++
在这组 64 位浮点数中,与分数完全对应sqrt(2)
的数字最为接近。正是这个有理数或十进制数,按照您告诉它的精度进行打印。6369051672525773/4503599627370496
1.4142135623730951454746218587388284504413604736328125
printf()
17 位限制是指区分任意两个浮点数所需的有效十进制数字的数量。换句话说,如果您打印一个精度为 17 位有效数字的浮点数,然后读回它,您可以保证得到与开始时相同的浮点数(到最后一位)。
另一个方向的转换,从十进制数开始,将其转换为浮点数(即使用 53 位分子和 2 的幂分母将其近似为最接近的分数),然后将其显示为十进制,只保证保留 15 位十进制数字。例如,十进制数.1234567890123456789
将近似为8895999183877727/72057594037927936
,即0.12345678901234567736988623209981597028672695159912109375
。在这种情况下,1
打印的浮点值的前 17 位(从 开始计数)对应于原始数字。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句