浮点数下溢的问题

时间:2023-01-08 08:47:41
在学<C Primer Plus >  感觉这里面有很多语句好像读不通顺,可能是翻译得不好吧
看到了浮点数下溢这里,我对书上讲解的不是很懂,希望有人能够详细地给我讲讲浮点数下溢的知识.要详细,我是新手!

17 个解决方案

#1


就是浮点数太小难以表示了

#2


能详细解释一下么?

#3


如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书

#4


自己搜ieee754,或者csapp讲计算机内数据表示那一章。

#5


float.h
...
#define DBL_DIG         15                      /* # of decimal digits of precision */
#define DBL_EPSILON     2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */
#define DBL_MANT_DIG    53                      /* # of bits in mantissa */
#define DBL_MAX         1.7976931348623158e+308 /* max value */
#define DBL_MAX_10_EXP  308                     /* max decimal exponent */
#define DBL_MAX_EXP     1024                    /* max binary exponent */
#define DBL_MIN         2.2250738585072014e-308 /* min positive value */
#define DBL_MIN_10_EXP  (-307)                  /* min decimal exponent */
#define DBL_MIN_EXP     (-1021)                 /* min binary exponent */
#define _DBL_RADIX      2                       /* exponent radix */
#define _DBL_ROUNDS     1                       /* addition rounding: near */

#define FLT_DIG         6                       /* # of decimal digits of precision */
#define FLT_EPSILON     1.192092896e-07F        /* smallest such that 1.0+FLT_EPSILON != 1.0 */
#define FLT_GUARD       0
#define FLT_MANT_DIG    24                      /* # of bits in mantissa */
#define FLT_MAX         3.402823466e+38F        /* max value */
#define FLT_MAX_10_EXP  38                      /* max decimal exponent */
#define FLT_MAX_EXP     128                     /* max binary exponent */
#define FLT_MIN         1.175494351e-38F        /* min positive value */
#define FLT_MIN_10_EXP  (-37)                   /* min decimal exponent */
#define FLT_MIN_EXP     (-125)                  /* min binary exponent */
#define FLT_NORMALIZE   0
#define FLT_RADIX       2                       /* exponent radix */
#define FLT_ROUNDS      1                       /* addition rounding: near */
...

#6


引用 5 楼 zhao4zhong1 的回复:
float.h
C/C++ code?123456789101112131415161718192021222324252627...#define DBL_DIG         15                      /* # of decimal digits of precision */#define DBL_EPSILON     2.2204460……

大神,我知道你牛逼,但是我新手看不懂这些!!

#7


C PRIMER PLUS 翻译的还行啊!
我快看结束了,书上好像有解释吧!

#8


引用 3 楼 ZHONGCONGWUJIANG 的回复:
如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~

#9


引用 8 楼 pokerLee 的回复:
Quote: 引用 3 楼 ZHONGCONGWUJIANG 的回复:

如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~


下溢是指:
   非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。

下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。

 

#10


引用 9 楼 lm_whales 的回复:
Quote: 引用 8 楼 pokerLee 的回复:

Quote: 引用 3 楼 ZHONGCONGWUJIANG 的回复:

如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~


下溢是指:
   非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。

下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。

 

你的意思是下溢之后的浮点值显示为0~~对么~~

#11


引用 10 楼 pokerLee 的回复:
Quote: 引用 9 楼 lm_whales 的回复:

Quote: 引用 8 楼 pokerLee 的回复:

Quote: 引用 3 楼 ZHONGCONGWUJIANG 的回复:

如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~


下溢是指:
   非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。

下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。

 

你的意思是下溢之后的浮点值显示为0~~对么~~

对的。

#12


引用 10 楼 pokerLee 的回复:
Quote: 引用 9 楼 lm_whales 的回复:

Quote: 引用 8 楼 pokerLee 的回复:

Quote: 引用 3 楼 ZHONGCONGWUJIANG 的回复:

如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~


下溢是指:
   非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。

下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。

 

你的意思是下溢之后的浮点值显示为0~~对么~~


引用 10 楼 pokerLee 的回复:
Quote: 引用 9 楼 lm_whales 的回复:

Quote: 引用 8 楼 pokerLee 的回复:

Quote: 引用 3 楼 ZHONGCONGWUJIANG 的回复:

如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~


下溢是指:
   非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。

下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。 

你的意思是下溢之后的浮点值显示为0~~对么~~

对的,除非你让它,抛出下溢异常

#13


引用 12 楼 lm_whales 的回复:
Quote: 引用 10 楼 pokerLee 的回复:

Quote: 引用 9 楼 lm_whales 的回复:

Quote: 引用 8 楼 pokerLee 的回复:

Quote: 引用 3 楼 ZHONGCONGWUJIANG 的回复:

如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~


下溢是指:
   非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。

下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。

 

你的意思是下溢之后的浮点值显示为0~~对么~~


引用 10 楼 pokerLee 的回复:
Quote: 引用 9 楼 lm_whales 的回复:

Quote: 引用 8 楼 pokerLee 的回复:

Quote: 引用 3 楼 ZHONGCONGWUJIANG 的回复:

如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~


下溢是指:
   非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。

下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。 

你的意思是下溢之后的浮点值显示为0~~对么~~

对的,除非你让它,抛出下溢异常
什么叫抛出下溢异常,网上有解释么?

#14


http://zh.wikipedia.org/wiki/%E7%AE%97%E6%9C%AF%E4%B8%8B%E6%BA%A2
不是简单的下溢为0

#15


引用 楼主 axf520 的回复:
在学<C Primer Plus >  感觉这里面有很多语句好像读不通顺,可能是翻译得不好吧
看到了浮点数下溢这里,我对书上讲解的不是很懂,希望有人能够详细地给我讲讲浮点数下溢的知识.要详细,我是新手!


这么理解数据溢出吧,c里面的数据类型占用的空间同一平台是一定的,既然空间有限,表示范围肯定有限,当结果太精确或者太大(有效位数太多),装不下了自然溢出。

#16


引用 13 楼 pokerLee 的回复:
什么叫抛出下溢异常,网上有解释么?

浮点数溢处,可以抛出异常,包括上溢,下溢。
异常,表示有不能直接处理的错误,于是终止当前代码的运行,让一场来处理代码,来处理这种情况。

浮点数的状态寄存器,有一些位,表示浮点计算溢出。

设置一下,浮点处理器,可以让它产生异常,而不是继续计算。

浮点数计算,有以下几种异常表现
1)结果为 INF 正负无穷大,这是上溢。
2)结果是 NaN 不是一个数,似乎是无穷大的某种运算结果,这个需要再查一查。
3)下溢,结果变成0 或者产生下溢异常。
4)特殊数据,不确定数据:IND 0/0 ,无穷大/无穷大,无穷大*0, 0*无穷大等结果不确定的数。
5)除数为0 ,结果应该是无穷大吧,这可能会,产生除数为0 中断(异常),不知道是不是同第一种。

这些情况,可以用结果表示,不产生异常;
也可以用异常(浮点处理器中断)表示,即产生异常。     
不产生异常时:
1)如果输出,结果为 +1.INF000,- +1.INF000之类的。
2)如果输出,结果为 +1.NaN000,- +1.NaN000之类的。
3)如果输出,结果为 0的。
4)如果输出,结果为 +1.IND000,-1.IND000之类的
5)如果输出,结果应该和第一种一样吧!


#17


引用 16 楼 lm_whales 的回复:
Quote: 引用 13 楼 pokerLee 的回复:

什么叫抛出下溢异常,网上有解释么?

浮点数溢处,可以抛出异常,包括上溢,下溢。
异常,表示有不能直接处理的错误,于是终止当前代码的运行,让一场来处理代码,来处理这种情况。

浮点数的状态寄存器,有一些位,表示浮点计算溢出。

设置一下,浮点处理器,可以让它产生异常,而不是继续计算。

浮点数计算,有以下几种异常表现
1)结果为 INF 正负无穷大,这是上溢。
2)结果是 NaN 不是一个数,似乎是无穷大的某种运算结果,这个需要再查一查。
3)下溢,结果变成0 或者产生下溢异常。
4)特殊数据,不确定数据:IND 0/0 ,无穷大/无穷大,无穷大*0, 0*无穷大等结果不确定的数。
5)除数为0 ,结果应该是无穷大吧,这可能会,产生除数为0 中断(异常),不知道是不是同第一种。

这些情况,可以用结果表示,不产生异常;
也可以用异常(浮点处理器中断)表示,即产生异常。     
不产生异常时:
1)如果输出,结果为 +1.INF000,- +1.INF000之类的。
2)如果输出,结果为 +1.NaN000,- +1.NaN000之类的。
3)如果输出,结果为 0的。
4)如果输出,结果为 +1.IND000,-1.IND000之类的
5)如果输出,结果应该和第一种一样吧!


谢谢~~

#1


就是浮点数太小难以表示了

#2


能详细解释一下么?

#3


如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书

#4


自己搜ieee754,或者csapp讲计算机内数据表示那一章。

#5


float.h
...
#define DBL_DIG         15                      /* # of decimal digits of precision */
#define DBL_EPSILON     2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */
#define DBL_MANT_DIG    53                      /* # of bits in mantissa */
#define DBL_MAX         1.7976931348623158e+308 /* max value */
#define DBL_MAX_10_EXP  308                     /* max decimal exponent */
#define DBL_MAX_EXP     1024                    /* max binary exponent */
#define DBL_MIN         2.2250738585072014e-308 /* min positive value */
#define DBL_MIN_10_EXP  (-307)                  /* min decimal exponent */
#define DBL_MIN_EXP     (-1021)                 /* min binary exponent */
#define _DBL_RADIX      2                       /* exponent radix */
#define _DBL_ROUNDS     1                       /* addition rounding: near */

#define FLT_DIG         6                       /* # of decimal digits of precision */
#define FLT_EPSILON     1.192092896e-07F        /* smallest such that 1.0+FLT_EPSILON != 1.0 */
#define FLT_GUARD       0
#define FLT_MANT_DIG    24                      /* # of bits in mantissa */
#define FLT_MAX         3.402823466e+38F        /* max value */
#define FLT_MAX_10_EXP  38                      /* max decimal exponent */
#define FLT_MAX_EXP     128                     /* max binary exponent */
#define FLT_MIN         1.175494351e-38F        /* min positive value */
#define FLT_MIN_10_EXP  (-37)                   /* min decimal exponent */
#define FLT_MIN_EXP     (-125)                  /* min binary exponent */
#define FLT_NORMALIZE   0
#define FLT_RADIX       2                       /* exponent radix */
#define FLT_ROUNDS      1                       /* addition rounding: near */
...

#6


引用 5 楼 zhao4zhong1 的回复:
float.h
C/C++ code?123456789101112131415161718192021222324252627...#define DBL_DIG         15                      /* # of decimal digits of precision */#define DBL_EPSILON     2.2204460……

大神,我知道你牛逼,但是我新手看不懂这些!!

#7


C PRIMER PLUS 翻译的还行啊!
我快看结束了,书上好像有解释吧!

#8


引用 3 楼 ZHONGCONGWUJIANG 的回复:
如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~

#9


引用 8 楼 pokerLee 的回复:
Quote: 引用 3 楼 ZHONGCONGWUJIANG 的回复:

如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~


下溢是指:
   非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。

下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。

 

#10


引用 9 楼 lm_whales 的回复:
Quote: 引用 8 楼 pokerLee 的回复:

Quote: 引用 3 楼 ZHONGCONGWUJIANG 的回复:

如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~


下溢是指:
   非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。

下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。

 

你的意思是下溢之后的浮点值显示为0~~对么~~

#11


引用 10 楼 pokerLee 的回复:
Quote: 引用 9 楼 lm_whales 的回复:

Quote: 引用 8 楼 pokerLee 的回复:

Quote: 引用 3 楼 ZHONGCONGWUJIANG 的回复:

如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~


下溢是指:
   非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。

下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。

 

你的意思是下溢之后的浮点值显示为0~~对么~~

对的。

#12


引用 10 楼 pokerLee 的回复:
Quote: 引用 9 楼 lm_whales 的回复:

Quote: 引用 8 楼 pokerLee 的回复:

Quote: 引用 3 楼 ZHONGCONGWUJIANG 的回复:

如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~


下溢是指:
   非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。

下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。

 

你的意思是下溢之后的浮点值显示为0~~对么~~


引用 10 楼 pokerLee 的回复:
Quote: 引用 9 楼 lm_whales 的回复:

Quote: 引用 8 楼 pokerLee 的回复:

Quote: 引用 3 楼 ZHONGCONGWUJIANG 的回复:

如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~


下溢是指:
   非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。

下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。 

你的意思是下溢之后的浮点值显示为0~~对么~~

对的,除非你让它,抛出下溢异常

#13


引用 12 楼 lm_whales 的回复:
Quote: 引用 10 楼 pokerLee 的回复:

Quote: 引用 9 楼 lm_whales 的回复:

Quote: 引用 8 楼 pokerLee 的回复:

Quote: 引用 3 楼 ZHONGCONGWUJIANG 的回复:

如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~


下溢是指:
   非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。

下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。

 

你的意思是下溢之后的浮点值显示为0~~对么~~


引用 10 楼 pokerLee 的回复:
Quote: 引用 9 楼 lm_whales 的回复:

Quote: 引用 8 楼 pokerLee 的回复:

Quote: 引用 3 楼 ZHONGCONGWUJIANG 的回复:

如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~


下溢是指:
   非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。

下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。 

你的意思是下溢之后的浮点值显示为0~~对么~~

对的,除非你让它,抛出下溢异常
什么叫抛出下溢异常,网上有解释么?

#14


http://zh.wikipedia.org/wiki/%E7%AE%97%E6%9C%AF%E4%B8%8B%E6%BA%A2
不是简单的下溢为0

#15


引用 楼主 axf520 的回复:
在学<C Primer Plus >  感觉这里面有很多语句好像读不通顺,可能是翻译得不好吧
看到了浮点数下溢这里,我对书上讲解的不是很懂,希望有人能够详细地给我讲讲浮点数下溢的知识.要详细,我是新手!


这么理解数据溢出吧,c里面的数据类型占用的空间同一平台是一定的,既然空间有限,表示范围肯定有限,当结果太精确或者太大(有效位数太多),装不下了自然溢出。

#16


引用 13 楼 pokerLee 的回复:
什么叫抛出下溢异常,网上有解释么?

浮点数溢处,可以抛出异常,包括上溢,下溢。
异常,表示有不能直接处理的错误,于是终止当前代码的运行,让一场来处理代码,来处理这种情况。

浮点数的状态寄存器,有一些位,表示浮点计算溢出。

设置一下,浮点处理器,可以让它产生异常,而不是继续计算。

浮点数计算,有以下几种异常表现
1)结果为 INF 正负无穷大,这是上溢。
2)结果是 NaN 不是一个数,似乎是无穷大的某种运算结果,这个需要再查一查。
3)下溢,结果变成0 或者产生下溢异常。
4)特殊数据,不确定数据:IND 0/0 ,无穷大/无穷大,无穷大*0, 0*无穷大等结果不确定的数。
5)除数为0 ,结果应该是无穷大吧,这可能会,产生除数为0 中断(异常),不知道是不是同第一种。

这些情况,可以用结果表示,不产生异常;
也可以用异常(浮点处理器中断)表示,即产生异常。     
不产生异常时:
1)如果输出,结果为 +1.INF000,- +1.INF000之类的。
2)如果输出,结果为 +1.NaN000,- +1.NaN000之类的。
3)如果输出,结果为 0的。
4)如果输出,结果为 +1.IND000,-1.IND000之类的
5)如果输出,结果应该和第一种一样吧!


#17


引用 16 楼 lm_whales 的回复:
Quote: 引用 13 楼 pokerLee 的回复:

什么叫抛出下溢异常,网上有解释么?

浮点数溢处,可以抛出异常,包括上溢,下溢。
异常,表示有不能直接处理的错误,于是终止当前代码的运行,让一场来处理代码,来处理这种情况。

浮点数的状态寄存器,有一些位,表示浮点计算溢出。

设置一下,浮点处理器,可以让它产生异常,而不是继续计算。

浮点数计算,有以下几种异常表现
1)结果为 INF 正负无穷大,这是上溢。
2)结果是 NaN 不是一个数,似乎是无穷大的某种运算结果,这个需要再查一查。
3)下溢,结果变成0 或者产生下溢异常。
4)特殊数据,不确定数据:IND 0/0 ,无穷大/无穷大,无穷大*0, 0*无穷大等结果不确定的数。
5)除数为0 ,结果应该是无穷大吧,这可能会,产生除数为0 中断(异常),不知道是不是同第一种。

这些情况,可以用结果表示,不产生异常;
也可以用异常(浮点处理器中断)表示,即产生异常。     
不产生异常时:
1)如果输出,结果为 +1.INF000,- +1.INF000之类的。
2)如果输出,结果为 +1.NaN000,- +1.NaN000之类的。
3)如果输出,结果为 0的。
4)如果输出,结果为 +1.IND000,-1.IND000之类的
5)如果输出,结果应该和第一种一样吧!


谢谢~~