这是一个愚蠢的问题。我正在使用System.Single的parse函数,它的行为异常,可能是因为我不太了解浮点数。 System.Single.MaxValue的MSDN页面指出最大值为3.402823e38,采用标准格式,即
340282300000000000000000000000000000000
如果我将此字符串用作Parse()方法的参数,它将成功执行而不会出现错误,如果我将任何零更改为任意数字,它仍将成功执行而不会出现错误(尽管在查看结果时似乎忽略了它们) 。据我了解,这超出了限制,所以我想念的是什么?
最佳答案
通过查看一些较低的数字可能更容易考虑这一点。直到16777216的所有(正)整数都可以用浮点数精确表示。在那之后,只能表示所有其他整数(直到下一次我们达到极限时为止,此时只能表示每第4个整数)。
因此,接下来要发生的是16777218必须代表16777218∓1,16777220必须代表16777220∓1,依此类推。当您向上移动更大的数字时,每个值必须“代表”的整数范围不断扩大越来越宽-直到340282300000000000000000000000000000000代表范围340282300000000000000000000000000000000∓100000000000000000000000000000000的所有点为止(实际上我还没有算出这里正确的∓值是多少,但希望您能理解点)
Number Significand Exponent
16777215 = 1 11111111111111111111111 2^0 = 111111111111111111111111
16777216 = 1 00000000000000000000000 2^1 = 1000000000000000000000000
16777218 = 1 00000000000000000000001 2^1 = 1000000000000000000000010
^
|
Implicit leading bit
关于c# - 使用Single.Parse()解析浮点数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23560675/