【发布时间】:2015-07-29 02:46:06
【问题描述】:
是否有任何有效的方法(不将浮点数转换为字符串)来获取浮点数所包含的位数(与其长度和精度无关)?
通过这种方式,我可以通过将浮点数乘以它所包含的位数来实现一个相当好的、可移植、无问题的比较/调节函数。
【问题讨论】:
-
你的意思是像 1.2 有 2,而 1.21 有 3?基本上数字在0开始或达到精度时结束?
-
PI 的长度是多少?
-
由于代码中的
0.1不是精确的数学数字0.1,您期望它的位数是多少?你的想法是有问题的,使问题不清楚。 -
0.1000000000000003怎么样?因为如果您尝试将0.1打印为double,这就是您可能得到的结果。 -
@Malina
1.00001很少完全可以表示为double。取而代之的是,1,00001 * 100000 = 100001在典型的 C 中以1.000010000000000065512040237081237137317657470703125 * 100000完成,并且乘积四舍五入到最接近的double:结果是100001。如果您尝试其他此类乘法,您可能会遇到一个不等于预期结果的结果,原因是 1) FP 数的二进制实现和 2) 乘积的舍入。
标签: c performance math floating-point digits