测试失败,因为您已经达到了二进制浮点表示的精度,在IEEE754 double
precision的情况下大约为16位。将649632196443.4279乘以10000将截断二进制表示形式,从而在随后舍入和除法时导致错误,从而使函数的结果完全无效。
有关更多详细信息,请参见http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems
更好的方法是检查
n+1小数位是否低于某个阈值。如果
d -round(d)小于
epsilon(请参阅limit),则的小数表示形式
d没有有效的小数位。同样,如果
(d- round(d)) * 10^n小于
epsilon,则d最多可以有
n重要位置。
使用Jon Skeet)的代码
DoubleConverter来检查
d是否不够精确,无法容纳您要查找的小数位。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)