IEEE 754浮点数学运算

时间:2016-06-21 15:45:21

标签: c++ c math floating-point biginteger

因此,对于浮点运算,据我所知,它是学校级数学的衍生物。乘法和除法可以在计算后加上或减去指数。在执行我的代码设计(在纸上)时,我遇到了一些我在下面列出的问题:

添加和/或减法...

  • 如果基数和指数不同,你如何处理?
  • 如果指数的差异大于biginteger数据类型的大小怎么办?

我在网上找到了一些东西,但没有任何真正说明如何解决这个问题。现在,从学校成绩数学开始,您必须先对值进行标准化,然后才能对它们进行任何计算。

因此...

2 ^ 3 + 3 ^ 2 = 8 + 9 = 17

这里需要同样的东西吗?

编辑:我向社区道歉,因为我认为问题非常具体。这是使用2的幂,因为当前平台是IA32。我不知道任何以十进制表示浮点数的平台。我使用小数作为例子。

第一个问题由Mark B回答:

  

值得庆幸的是,浮点数都是以2的幂完成的,所以只需将指数归一化。例如使用10科学记数法的力量。

所以现在第二个问题(如上所列)是你为了规范化价值而做的,你必须转移的金额超过了数据类型的空间?换句话说,如果我说...... 32位精度,我必须转移...说35位......让指数匹配,你如何处理这个条件? FPU如何处理它?<​​/ p>

2 个答案:

答案 0 :(得分:1)

值得庆幸的是,浮点数都是以2的幂完成的,所以只需将指数归一化。例如使用10科学记数法的力量:

   3.1e5        0.031e7
+ 2.96e7  ->  + 2.96 e7  
--------        -------
                2.991e7

答案 1 :(得分:0)

IEE 754浮点数只是浮点数的一种实现。像往常一样,维基百科上有很好的references

您选择一个基数(通常为2,但IEEE 754也定义基数为10),然后将实数表示为f = sign * significand * base exponent ,其中significand和exponent是两个整数并将其标记为i或-1。具体来说,你有:

  

有限数,可以是基数2(二进制)或基数10(十进制)。每个有限数由三个整数描述:s =符号(零或一),c =有效数(或'系数'),q =指数。有限数的数值是
        (-1)s×c×bq
      其中b是基数(2或10),也称为基数。例如,如果基数为10,则符号为1(表示负数),有效数为12345,指数为-3,则数值为-11×12345×10-3 = -1×12345 ×.001 = -12.345。

     

两个无穷大:+∞和-∞。

     

两种NaN:安静的NaN(qNaN)和信号NaN(sNaN)。 NaN可以携带用于指示NaN源的诊断信息的有效载荷。 NaN的符号没有任何意义,但在某些情况下可能是可预测的。

     

可以用格式表示的可能有限值由基数b,有效数字中的位数(精度p)和指数参数emax确定:

     
      
  • c必须是0到bp-1范围内的整数(例如,如果b = 10且p = 7则c为0到9999999)

  •   
  • q必须是1-emax≤q+ p-1≤emax的整数(例如,如果p = 7且emax = 96则q为-101到90)。

  •   
     

因此(对于示例参数)可以表示的最小非零正数是1×10-101,最大的是9999999×1090(9.999999×1096),并且整个数字范围是-9.999999× 1096至9.999999×1096。数字-b1-emax和b1-emax(这里,-1×10-95和1×10-95)是最小(幅度)正常数;这些最小数字之间的非零数字称为次正规数。

     

零值是有效值,有效数为0.这些是有符号零,符号位指定零是+0(正零)还是-0(负零)。

请查看参考页面了解更多详情......