【发布时间】:2016-01-31 21:27:03
【问题描述】:
标题几乎概括了一切。
我知道浮点数总共为 32 位,尾数为 23 位,指数值为 8 位,签名为 1 位。
计算“int”的范围非常简单:32bits = 32-1bit signature =31bits ==> 因此范围是 2³¹= 2.14e9
这个公式是有道理的......
现在我查看了 stackoverflow,但我发现的所有关于浮点范围计算的答案都缺乏实质内容。只是一堆随机出现在响应中并神奇地得出 3.4e38 结论的数字。
我正在寻找真正了解该主题的人的答案。有人可以通过使用公式来解释如何计算此范围。
谢谢大家。
月。
【问题讨论】:
-
" 知道浮点数总共是 32 位..." 你知道错了。即使对于
float类型,这也不一定正确。 C 标准不强制执行特定的格式或大小,只是最低要求。对于double,这绝对是错误的。对于int,您也错了。大多数系统实际上使用 16 位ints。 -
"8bits 的签名和指数值" ~ 错了! 32 位
float具有 8 位指数和 1 位符号。 matissa 有 24 位的重要性,但由于它被规范化为在其 msb 中有一个1(值0除外),该位不存储,仅存储 24 位尾数的 23 位。 -
感谢您对@WeatherVane 的实际解释。
标签: c floating-point