当前位置:  开发笔记 > 编程语言 > 正文

d == 9000000000000000000d无限循环

如何解决《d==9000000000000000000d无限循环》经验,为你挑选了1个好方法。

考虑以下代码:

double d = 9000000000000000000d;
while (d == 9000000000000000000d)
{
   d += 500;
   Console.WriteLine(d);
}

为什么代码会遇到无限循环?

为什么编译器不抛出任何异常?



1> MrTux..:

双精度具有不同的精度,即固定数量的有效位.

双/浮点数(浮点数)由指数和mantisse组成(参见IEEE754标准).逻辑与此相关的是,对于较大的数字,对于较小的数字,不需要高精度,而对于较小的数字,则需要高精度.因此,可能会发生这种情况,对于大数字来说d==d+1也是如此+1(这也是为什么不应该使用浮点数代表货币的原因 ;同时比较浮点数是有问题的,4*0.1!=0.4可能是真的,具体取决于实现和可能的舍入错误).这是在IEEE754标准中定义的,因此不会抛出任何异常(顺便说一下.编译器可以发出警告或错误,但不抛出任何异常).

这与总是具有精度的整数相反1.因此,如果需要处理精度为1的大数,则需要考虑使用BigInteger实现或使用decimal一组固定的十进制数字并保证精度.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有