2013-03-02 120 views
1

在C++标准,它说浮动文字的:,64位和80位浮点IEEE-754?

如果缩放后​​的值不在其类型可表示的值的范围,是形成不良的节目。

缩放值是重要部分乘以10 ^指数部分。

在X86-64:

  • float是一个单精度IEEE-754
  • double是一个双精度IEEE-754
  • long double是一个80位的扩展精度IEEE-754

在这种情况下,这三种类型中每一种的可代表值的范围是多少?这在哪里记录?或者它是如何计算的?

+0

http://en.wikipedia.org/wiki/IEEE_floating_point – msw 2013-03-02 13:24:19

+0

在x86-64下,FP算术使用SSE完成,因此“long double”是64位。 – MSalters 2013-03-02 14:59:55

+0

@ MSalters:你能清除这里:http://stackoverflow.com/questions/15176290/long-double-confusion-on-x86-64-64bit – 2013-03-02 15:46:16

回答

2

答案(如果你在一台带有IEEE浮点的机器上)在float.h中是 。 FLT_MAX,​​和LDBL_MAX。在具有完整的IEEE支持的系统 ,周围的东西3.4E + 38,+ 1.8E 308和 1.2E4932。 (精确值可以变化,并且可以被不同地表示 ,取决于编译器如何完成其​​输入和 舍入克++,例如,将它们定义为编译器 内置插件。)

编辑:

WRT您的问题(因为无论是我还是其他反应 实际上回答了这个问题):表示的值的范围是 [-type_MAX...type],其中 typeFLT一个,DBLLDBL

3

如果你知道指数位和尾数位的数量,然后根据IEEE-754 format,一个可以建立的最大绝对值表示值是:

2^(2^(E-1)-1)) * (1 + (2^M-1)/2^M) 

最小绝对值(不包括零或denormals )为:

2^(2-2^(E-1)) 
  • 对于单精度,E为8,M为23
  • 对于双精度,E是11,M是52
  • 对于扩展精度,我不知道。如果你指的是x87 FPU的80位精度,那么据我所知,它是not's IEEE-754 compliant ...
+0

如果'E'是指数的位数,则公式中缺少一个'2 ^',是不是? – 2013-03-02 13:27:40

+0

@PascalCuoq:是的,你是对的。谢谢! – 2013-03-02 13:28:27

-3

我被64位寻找最大可表示数,并结束了使我自己的500位浮点运算。这就是我想出如果所有64位被打开

18,446,744,073,709,551,615

18千万亿446万亿7440000亿73十亿7.09亿551000 615

+0

有关浮点数的问题。你给出的答案是一个64位整数。 – Blackwood 2015-09-08 19:19:32