这是一个愚蠢的问题.我正在使用System.Single的解析函数,它表现出意想不到的可能是因为我不太了解浮点数.System.Single.MaxValue的MSDN页面声明最大值为3.402823e38,标准格式为
340282300000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)
如果我使用这个字符串作为Parse()方法的参数,它将成功没有错误,如果我将任何零更改为任意数字它仍然会成功而没有错误(虽然它似乎忽略它们查看结果) .根据我的理解,这超出了限制,所以我错过了什么?
通过查看一些较低的数字可能会更容易思考这个问题。16777216 以内的所有(正)整数都可以用浮点数精确表示。在那之后,只能表示每隔一个整数(直到下一次达到限制时,此时只能表示每 4 个整数)。
\n\n所以接下来会发生的是 16777218 必须代表 16777218\xe2\x88\x931,16777220 必须代表 16777220\xe2\x88\x931,等等。当你向上移动到更大的数字时,整数的范围每个值必须“代表”变得越来越宽 - 直到 340282300000000000000000000000000000000 代表 3402823000000000000000000000000000000000\xe2\x88\x93100000000 范围内的所有数字。 000000000000000000000000,大约(我实际上还没有弄清楚正确的\xe2\x88\x93价值就在这里,但希望你能明白这一点)
\n\nNumber Significand Exponent\n\n16777215 = 1 11111111111111111111111 2^0 = 111111111111111111111111\n16777216 = 1 00000000000000000000000 2^1 = 1000000000000000000000000\n16777218 = 1 00000000000000000000001 2^1 = 1000000000000000000000010\n ^\n |\n Implicit leading bit\nRun Code Online (Sandbox Code Playgroud)\n