我一直在尝试寻找如何计算浮点数/双精度数/范围数-3.402823e38..3.402823e38和-1.79769313486232e308.1.79769313486232e308。
对于int32,您需要做2^32=4294967296/2,得到的范围是-2147483648到2147483647。那么我该如何计算出浮点数和双精度数的精度呢?我想我在搜索错误的术语,因为什么都没有出现。
发布于 2011-01-31 22:41:09
我已经从不同方面(当然不是全部)讨论了浮点格式。这个答案可能会对你有所帮助:https://stackoverflow.com/questions/4851671/printing-double-without-losing-precision
发布于 2011-01-06 09:56:30
它不是那么容易计算的。这是因为浮点数和双精度数的实现方式。它们都分为两部分:一部分是基数,另一部分是指数。我认为浮点数被分成24位基数和8位指数。但我对此不太确定!我将基于这一事实进行进一步的计算和假设,因此这些计算可能都是错误的,但它们说明了正确的原则。这些规范在不同的语言中也可能不同,即使有一些标准说它们不应该。但是在编程时没有什么是理所当然的:p
这意味着基数可以在-8388608到8388607之间,指数可以在-128到127之间。
然后,当使用数字时,计算机是这样想的:
基*10^指数
这导致最大可能的数字是8388607 *10^127,这将是...很多。但它将包含120个零,因为它不能指定超过7个数字。
随着数字的增长,数字的准确性会降低。这意味着您的问题的格式不正确;)如果您知道需要多少个正确的小数位数,则只能为浮点数指定一个有效范围。如果您需要2个保证精确小数的可能性,那么float的范围是-83885到83885。
https://stackoverflow.com/questions/4610999
复制相似问题