看到了浮点数下溢这里,我对书上讲解的不是很懂,希望有人能够详细地给我讲讲浮点数下溢的知识.要详细,我是新手!
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
大神,我知道你牛逼,但是我新手看不懂这些!!
#7
C PRIMER PLUS 翻译的还行啊!
我快看结束了,书上好像有解释吧!
我快看结束了,书上好像有解释吧!
#8
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~
#9
下溢是指:
非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。
下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。
#10
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~
如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
下溢是指:
非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。
下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。
#11
你的意思是下溢之后的浮点值显示为0~~对么~~ 我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~
如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
下溢是指:
非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。
下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。
对的。
#12
你的意思是下溢之后的浮点值显示为0~~对么~~ 我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~
如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
下溢是指:
非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。
下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。
你的意思是下溢之后的浮点值显示为0~~对么~~ 我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~
如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
下溢是指:
非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。
下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。
对的,除非你让它,抛出下溢异常
#13
你的意思是下溢之后的浮点值显示为0~~对么~~ 我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~
如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
下溢是指:
非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。
下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。
你的意思是下溢之后的浮点值显示为0~~对么~~ 我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~
如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
下溢是指:
非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。
下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。
对的,除非你让它,抛出下溢异常
#14
http://zh.wikipedia.org/wiki/%E7%AE%97%E6%9C%AF%E4%B8%8B%E6%BA%A2
不是简单的下溢为0
不是简单的下溢为0
#15
在学<C Primer Plus > 感觉这里面有很多语句好像读不通顺,可能是翻译得不好吧
看到了浮点数下溢这里,我对书上讲解的不是很懂,希望有人能够详细地给我讲讲浮点数下溢的知识.要详细,我是新手!
这么理解数据溢出吧,c里面的数据类型占用的空间同一平台是一定的,既然空间有限,表示范围肯定有限,当结果太精确或者太大(有效位数太多),装不下了自然溢出。
#16
什么叫抛出下溢异常,网上有解释么?
浮点数溢处,可以抛出异常,包括上溢,下溢。
异常,表示有不能直接处理的错误,于是终止当前代码的运行,让一场来处理代码,来处理这种情况。
浮点数的状态寄存器,有一些位,表示浮点计算溢出。
设置一下,浮点处理器,可以让它产生异常,而不是继续计算。
浮点数计算,有以下几种异常表现
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
什么叫抛出下溢异常,网上有解释么?
浮点数溢处,可以抛出异常,包括上溢,下溢。
异常,表示有不能直接处理的错误,于是终止当前代码的运行,让一场来处理代码,来处理这种情况。
浮点数的状态寄存器,有一些位,表示浮点计算溢出。
设置一下,浮点处理器,可以让它产生异常,而不是继续计算。
浮点数计算,有以下几种异常表现
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
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
如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
#9
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~
如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
下溢是指:
非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。
下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。
#10
我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~
如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
下溢是指:
非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。
下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。
#11
你的意思是下溢之后的浮点值显示为0~~对么~~ 我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~
如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
下溢是指:
非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。
下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。
对的。
#12
你的意思是下溢之后的浮点值显示为0~~对么~~ 我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~
如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
下溢是指:
非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。
下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。
你的意思是下溢之后的浮点值显示为0~~对么~~ 我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~
如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
下溢是指:
非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。
下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。
对的,除非你让它,抛出下溢异常
#13
你的意思是下溢之后的浮点值显示为0~~对么~~ 我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~
如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
下溢是指:
非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。
下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。
你的意思是下溢之后的浮点值显示为0~~对么~~ 我可以理解成尾部部分无法精确表示吗?不关指数部分的事~~
如同整型,浮点数也是离散的,就是说零之后的那个正浮点数不是无穷小,而是一个确定的值,可以想象,中间必然存在无数个值,这些值是float表示不出来的,结果会被表示为0,称之为下溢。具体可以看下 计算机组成与体系结构 之类的书
下溢是指:
非零的表达式,由于浮点数不能表示,结果为0;
尾数无法表示,丢失一部分尾数位,称为精度损失。
下溢,是精度完全损失,尾数没有一个位为1(包括隐含位),变成全0的表现。
这时,指数部分是值为-127,由于是移码表示,实际上指数也是0。
正好是0 的编码。
对的,除非你让它,抛出下溢异常
#14
http://zh.wikipedia.org/wiki/%E7%AE%97%E6%9C%AF%E4%B8%8B%E6%BA%A2
不是简单的下溢为0
不是简单的下溢为0
#15
在学<C Primer Plus > 感觉这里面有很多语句好像读不通顺,可能是翻译得不好吧
看到了浮点数下溢这里,我对书上讲解的不是很懂,希望有人能够详细地给我讲讲浮点数下溢的知识.要详细,我是新手!
这么理解数据溢出吧,c里面的数据类型占用的空间同一平台是一定的,既然空间有限,表示范围肯定有限,当结果太精确或者太大(有效位数太多),装不下了自然溢出。
#16
什么叫抛出下溢异常,网上有解释么?
浮点数溢处,可以抛出异常,包括上溢,下溢。
异常,表示有不能直接处理的错误,于是终止当前代码的运行,让一场来处理代码,来处理这种情况。
浮点数的状态寄存器,有一些位,表示浮点计算溢出。
设置一下,浮点处理器,可以让它产生异常,而不是继续计算。
浮点数计算,有以下几种异常表现
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
什么叫抛出下溢异常,网上有解释么?
浮点数溢处,可以抛出异常,包括上溢,下溢。
异常,表示有不能直接处理的错误,于是终止当前代码的运行,让一场来处理代码,来处理这种情况。
浮点数的状态寄存器,有一些位,表示浮点计算溢出。
设置一下,浮点处理器,可以让它产生异常,而不是继续计算。
浮点数计算,有以下几种异常表现
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)如果输出,结果应该和第一种一样吧!