舍入时 [int] = [浮法] + [int] (Obj-C,iOS 吗?)

标签: ios Objective-C
发布时间: 2017/3/21 23:04:49
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

在这种情况下︰

float a = 0.99999f;
int b = 1000;
int c = a + b;

结果在 c = 1001 。我发现它发生因为 b 转换为 float (特定的 iOS),然后 a + b 没有足够的精度 1000.9999 和 (为什么?) 四舍五入到较高的价值。如果 a0.999f 我们得到 c = 1000 -理论上正确的行为。

所以我的问题是为什么浮数四舍五入,使较高的价值?在这里介绍了此行为 (或公约) 吗?

这个测试是有 iPhone 模拟器,苹果 LLVM 4.2 编译器的。

解决方法 1:

int c = a + b ,整数 b 第一,转换为一个浮点数,然后添加 2 浮点数,则结果被截断为整数。

浮点舍入模式的默认值是 FE_TONEAREST ,这意味着,相加后的结果

0.99999f + 1000f

是可以表示为一个浮点数,最接近的数字,那是数 1001f 。此浮动然后截断为整数 c = 1001

如果您更改舍入模式

#include <fenv.h>
fesetround(FE_DOWNWARD);

然后相加后的结果将向下舍入 (约 1000.99993f ),你会得到 c = 1000

赞助商