如何计算C中的长双倍范围?

时间:2016-07-14 20:11:24

标签: c

在学习C的同时,我开始知道长双倍的范围是3.4E-4932到1.1E + 4932。这里的E是什么? 10英寸长的双倍大小。如果我假设E是10那么双倍存储数字直到小数点后的19位。

2 个答案:

答案 0 :(得分:2)

3.4E-4932表示enter image description here。浮点数和双精度数都以保持指数和尾数分开的格式存储。在你的例子中,-4392将在指数中编码,3.4将在尾数中编码,两者都作为二进制数。

请注意,IEEE浮点格式有多种范围,可用性因平台而异。有关详细信息,请参阅IEEE floating point。正如Joe Farrell所指出的,你的范围可能是x86 Extended Precision Format。该格式携带1位符号,15位二进制指数(e),偏置为-16383,以及1 + 63位二进制尾数(m)。对于标准化数字,该值计算为enter image description here

此格式中最小的正标准化数字的符号位为0,指数为1,尾数为1.0,对应enter image description hereenter image description here。在二进制文件中,该数字如下:

enter image description here

答案 1 :(得分:0)

英特尔硬件上的长双倍(或实际上任何浮点宽度)范围通常为[-∞, ∞]。在这些端点之间,许多有限数字也是可表示的:

  • 0
  • ±m×2 e ,其中:
  • m是1到2 64 -1和
  • 之间的整数
  • e是-16445和16320之间的整数

这意味着最小的非零长双是2 -16445 ,最大的有限长双是(2 64 -1)·2 16320 (或2 16384 -2 16320 ),其等于问题中科学计数法中的十进制数。< / p>

有关表示的详细信息,请参阅this Wikipedia article(二进制,而非十进制)。