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的幂完成的,所以只需对指数进行规格化。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)
请查看参考页以了解更多详细信息。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−