返回true?我想知道您是否可以解释浮点类型的溢出。float.MaxValue==float.MaxValue+1//返回true,因为1太小而无法影响float.MaxValue值。任何小于1e32的精度都低于浮点数,因此它实际上与加零相同。编辑:ulrichb表明1e23的值实际上会影响float.MaxValue,这意味着您根本没有比较浮点数,而是加倍。编译器在添加和比较之前将所有值转换为双精度值。这很有趣:floatfMax=float.MaxValue;双dMax=double.MaxValue;Console.WriteLine("{0},{1}",fMax==fMax+1E22f,fMax+1E22f);Console.WriteLine("{0},{1}",fMax==fMax+1E23f,fMax+1E23f);Console.WriteLine("{0},{1}",dMax==dMax+1E291d,dMax+1E291d);Console.WriteLine("{0},{1}",dMax==dMax+1E292d,dMax+1E292d);prints:yes,3.402823E+38false,3.402823E+38yes,1.79769313486232E+308false,infiniteso,......正如Guffa所说,fMax+1E23f转换为double,dMax+1E292d加起来为Infinity。这里的问题是浮点精度。float.MaxValue对应3.40282e+038f。但是float的精度要低得多,实际上只有7位精度。超出该精度的任何内容都是“零填充”,并且向该高数字加1不会改变它。简而言之,区别在于第39位,而float仅存储前7(ish)位。这是浮点运算的一个特点。对于实际保存单精度值的float类型临时变量,必须从内存中的float变量加载它。编译器通常被允许以比要求更高的精度表示单精度值,并且当值在寄存器中时倾向于这样做。当它溢出回内存时,额外的精度就会丢失。以上是C#学习教程:为什么返回true?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
