gpt4 book ai didi

floating-point - 如何计算 double + 浮点精度

转载 作者:行者123 更新时间:2023-12-04 03:02:29 28 4
gpt4 key购买 nike

我一直在寻找如何计算浮点/ double /范围数字
-3.402823e38 .. 3.402823e38 和 -1.79769313486232e308 .. 1.79769313486232e308。

对于 int32,你会做 2^32=4294967296/2 你得到 -2147483648 到 2147483647 的范围。那么我如何计算浮点和 double 数。我想我正在搜索错误的术语,因为任何地方都没有出现。

最佳答案

好吧,这两种类型实际上都如下所示:

[sign] [exponent] [mantissa]

以下列形式表示一个数字:

[sign] 1.[mantissa] × 2[exponent]



随着指数和尾数的大小变化。对于 float指数是 8 位宽,而 double有一个 11 位的指数。此外,指数以无符号形式存储,偏差为 float 的 127和 1023 表示 double .这导致 float 的指数范围为 -126 到 127 -1022 到 1023 表示 double .

指数是 2something 的指数,因此在计算 2127 时,您将得到 1.7 × 1038,这使您处于 float 的近似范围内。最大值。 double 类似9 × 10307。

显然,这些数字并不完全符合我们的预期。这就是尾数发挥作用的地方。尾数表示始终以“1”开头的标准化二进制数。 (这是标准化的部分)。其余的只是点之后的数字。由于最大尾数大约是 1.111111111... 二进制,几乎是 2,我们将得到大约 3.4 × 1038 作为 float的最大值和 1.79 × 10308 作为 double 的最大值.

[编辑 2011-01-06] 正如马克在下面(以及问题下面)指出的那样,确切的公式如下:

Formula to calculate the exact maximum value for an IEEE-754 floating-point type: 2^(2^(e-1) )⋅(1-2^(-p) )

其中 e 是指数中的位数,p 是尾数中的位数,包括前面提到的隐式位(由于归一化)。该公式复制了我们上面看到的内容,现在才准确。第一个因子 22e − 1 是最大指数,乘以 2(然后我们将这两个保存在第二个因子中)。第二个因素是我们可以在一个以下表示的最大数字。我上面说的数字几乎是两个。由于我们在这个公式中将指数夸大了两倍,我们需要考虑到这一点,现在有一个几乎是 1 的数字。我希望它不会太困惑。

无论如何,对于 float (e = 8 且 p = 24)我们得到精确值 340282346638528859811704183484516925440 或大约 3.4 × 1038。 double然后产率(用E = 10和p = 53)179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368或大致1.80×10308。

[/编辑]

另一件事:您在问题中提出了“精度”一词,但引用了类型的范围。精度是一个完全不同的东西,它指的是类型可以保留多少有效数字。同样,这里的答案在于 float 的尾数是 23 位和 52 位。和 double , 分别。由于数字是标准化存储的,我们实际上在其中添加了一个隐式位,这使我们处于 24 位和 53 位。现在,十进制(或这里的二进制)点后的数字如何工作如下:
 1.   1     0     1     1
↑ ↑ ↑ ↑ ↑
2^0 2^-1 2^-2 2^-3 2^-4
= = = = =
1 0.5 0.25 0.125 0.0625

所以 double中的最后一位尾数表示大约 2.2 × 10−16 或 2−52 的值,因此如果指数为 1,这是我们可以添加到数字中的最小值——放置 double精度约为 16 位十进制数字。同样对于 float大约七位数。

关于floating-point - 如何计算 double + 浮点精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4610999/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com