Java忽略算术溢出,IEEE-754:“最小”溢出条件

Before I start, just some background information:

我正在使用编译器标准数学库(符合IEEE-754)在Keil uVision3中编译的ARM7微控制器(LPC2294 / 01)上运行裸机应用程序 .

The issue: I 'm having trouble wrapping my head around what exactly constitutes an '溢出'对2个单精度浮点输入的总和 .

最初,我的印象是,如果我试图将任何正值添加到可以用IEEE-754表示法表示的最大值,结果将产生溢出异常 .

例如,假设我有:

a = 0x7f7fffff (ie. 3.4028235..E38);

b = 0x3f800000 (ie. 1.0)

我期望将这两个值相加会导致IEEE-754中定义的溢出 . 令我最初的惊讶,结果只返回'a'的值,没有标记异常 .

所以我想,因为精确度(或者你喜欢的分辨率)随着所表示的值的增加而减小,所以在这种情况下,值“1”可能由于其相对不重要而有效地向下舍入到0 .

So that begged the question: 在这种情况下,'b'的最小值会导致溢出异常吗?它取决于IEEE-754的具体实现吗?

也许就像我不了解如何在这种特殊情况下确定最小“重要”精度一样简单,但是考虑到下面的代码,为什么第二个和会导致溢出而不是第一个?

static union sFloatConversion32

{

unsigned int unsigned32Value;

float floatValue;

} sFloatConversion32;

t_bool test_Float32_Addition(void)

{

float a;

float b;

float c;

sFloatConversion32.unsigned32Value = 0x7f7fffff;

a = sFloatConversion32.floatValue;

sFloatConversion32.unsigned32Value = 0x72ffffff;

b = sFloatConversion32.floatValue;

/* This sum returns (c = a) without overflow */

c = a + b;

sFloatConversion32.unsigned32Value = 0x73000000;

b = sFloatConversion32.floatValue;

/* This sum, however, causes an overflow exception */

c = a + b;

}

是否存在可以应用的通用规则,使得可以提前知道(即,不执行总和),给定两个浮点数,它们的总和将导致IEEE-754定义的溢出?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值