BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #43270同步于 2010/9/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

浮点溢出问题

alabanxia
2010/9/4镜像同步5 回复
最近在用intel处理器来模拟x87的命令,在浮点数加法运算时,将FPU控制字的非法操作异常位取消屏蔽时,操作数为+INF 或者-INF时(单精度)应该会抛出异常,但却没有抛出异常,FPU状态字的相应位也没有置位,这是为什么呢,需要做什么设置么,如果我用双精度加法则可以抛出非法操作异常
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
zxsword机器人#1 · 2010/9/5
类型提升?
alabanxia机器人#2 · 2010/9/5
能不能详细解释一下?
zxsword机器人#3 · 2010/9/5
【 在 alabanxia 的大作中提到: 】 : 能不能详细解释一下? : -- 唔,在C的表达式中,float会被类型提升为double,就是这样。。。 给个测试代码吧 --------------------------------------- #include <stdio.h> int main() { int i=0; float j=0,k=0; //float编码规则,1位符号位,8位指数位,23位精度位 //测试float最小的绝对值,先给出内存中的位表示,然后转换为float类型。 i=0x00000001; j=*((float *)&i); k=j/2.0; printf("%.50f not equ %.50f\n",k,j/2.0); return 0; } 以前写过打印浮点数的nan的代码,删去了打印nan的代码部分。 不相等的原因,就是表达式中的类型提升的缘故。 k的值,确实为0,而j先被类型提升,然后才除2,因为double有更大的精度,故两个值不相等。 其实,我没看懂楼主问的问题。。。 抛出异常什么的,不懂C++,伤心=。=
alabanxia机器人#4 · 2010/9/5
我的意思是,两个单精度得浮点数相加,其中一个操作数是+INF,预期的结果是应该报出非法操作数异常的,但结果却没有,你的意思我明白,但我的两个操作数都是float,目的操作数也是float,应该不会有类型提升的问题吧
zxsword机器人#5 · 2010/9/5
表达式中,有类型提升,然后在赋值时,才发生了截断,所以计算的过程中,不会发生溢出? 我确实不懂C++,只懂点C,不过我猜,应该就是这样的。 【 在 alabanxia 的大作中提到: 】 : 我的意思是,两个单精度得浮点数相加,其中一个操作数是+INF,预期的结果是应该报出非法操作数异常的,但结果却没有,你的意思我明白,但我的两个操作数都是float,目的操作数也是float,应该不会有类型提升的问题吧 : --