Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ IEEE 754浮点数学运算_C++_C_Math_Floating Point_Biginteger - Fatal编程技术网

C++ IEEE 754浮点数学运算

C++ IEEE 754浮点数学运算,c++,c,math,floating-point,biginteger,C++,C,Math,Floating Point,Biginteger,据我所知,浮点运算是学校数学的衍生物。乘法和除法你可以在计算后加上或减去指数。在执行代码设计(在纸上)时,我遇到了以下几个问题: 对于加法和/或减法 如果基数和指数都不同,你如何处理这个问题 如果指数的差异大于biginteger数据类型的大小,该怎么办 我在网上找到了一些东西,但没有任何东西真正说明如何处理这个问题。现在,从学校年级的数学开始,在对这些值进行任何计算之前,必须对它们进行标准化 所以 2^3+3^2=8+9=17 这里需要同样的东西吗 编辑:我为这一困惑向社区道歉,因为我认为

据我所知,浮点运算是学校数学的衍生物。乘法和除法你可以在计算后加上或减去指数。在执行代码设计(在纸上)时,我遇到了以下几个问题:

对于加法和/或减法

  • 如果基数和指数都不同,你如何处理这个问题
  • 如果指数的差异大于biginteger数据类型的大小,该怎么办
我在网上找到了一些东西,但没有任何东西真正说明如何处理这个问题。现在,从学校年级的数学开始,在对这些值进行任何计算之前,必须对它们进行标准化

所以

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

这里需要同样的东西吗

编辑:我为这一困惑向社区道歉,因为我认为这个问题非常具体。这是使用2的幂,因为当前平台是IA32。我不知道有哪一个平台可以实现十进制浮点运算。我以十进制为例

第一个问题由Mark B回答:


谢天谢地,浮点运算都是以2的幂完成的,所以只需对指数进行规格化。e、 g.使用10种科学符号的幂


因此,现在第二个问题(如上所列)是,当为了规范化值,必须移位的量超过数据类型中的空格时,应该怎么做?换句话说,如果我有32位的精度,我必须移位,比如35位,以得到匹配的指数,你如何处理这种情况?FPU是如何处理的?

谢天谢地,浮点运算都是以2的幂完成的,所以只需将指数标准化即可。e、 g.使用10种科学符号的幂:

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

谢天谢地,浮点运算都是以2的幂完成的,所以只需对指数进行规格化。e、 g.使用10种科学符号的幂:

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

IEE 754浮点数只是浮点数的一种实现。和往常一样,维基百科也有不错的内容

选择一个基数(通常为2,但IEEE 754也定义了基数10),然后实数表示为f=符号*有效位*基指数,其中有效位和指数都是整数,并对其进行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必须是从零到bp范围内的整数−1(例如,如果b=10,p=7,则c为0到999999)

  • q必须是一个整数,使得1−emax≤ q+p−1.≤ emax(例如,如果p=7,emax=96,则q为−101至90)

因此(对于示例参数),可以表示的最小非零正数为1×10−101,最大值为9999999×1090(9.9999999×1096),全数字范围为−9.9999999×1096到9.9999999×1096。数字−b1−emax和b1−emax(这里,−1×10−95和1×10−95)是最小的(数量级)正常数;这些最小数之间的非零数称为次正常数

零值是有效位为0的有限值。这些是有符号的零,符号位指定零是+0(正零)还是−0(负零)


请查看参考页以了解更多详细信息。

IEE 754浮点数只是浮点数的一种实现。和往常一样,维基百科也有不错的内容

选择一个基数(通常为2,但IEEE 754也定义了基数10),然后实数表示为f=符号*有效位*基指数,其中有效位和指数都是整数,并对其进行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必须是从零到bp范围内的整数−1(例如,如果b=10,p=7,则c为0到999999)

  • q必须是一个整数,使得1−emax≤ q+p−