加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 无限循环浮动

发布时间:2020-12-15 19:27:05 所属栏目:百科 来源:网络整理
导读:请考虑以下代码: for (float i = 0f; i int.MaxValue; i++){ // Some code} 应该从0循环到int.MaxValue(231-1),但它没有.一旦我达到224,我就不再工作了,因为我完全无法理解. 在VS的立即窗口中,我试试这个: i16777216.0i + 116777216.0 // ???i == i + 1fal
请考虑以下代码:

for (float i = 0f; i < int.MaxValue; i++)
{
    // Some code
}

应该从0循环到int.MaxValue(231-1),但它没有.一旦我达到224,我就不再工作了,因为我完全无法理解.

在VS的立即窗口中,我试试这个:

>i
16777216.0
>i + 1
16777216.0 // ???
>i == i + 1
false // as expected,but a lack of consistency with upper statement
>i + 2
16777218.0

为什么它会这样? 224 1有什么特别之处?

解决方法

这是因为浮动精度.它基于IEEE浮点运算标准( IEEE 754).阅读它以了解浮点的工作原理.

简单来说,当一个浮点数本身存储一个大值时;当前存储的数字与它可以存储的下一个数字之间的差异大于1,因此向其添加1并不会增加它的值.

如果您需要精确的十进制数,请使用decimal.
如果需要大于int的整数值,请使用long.
如果需要非常大的积分值,请使用BigInteger.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读