ios - 当 [int] = [float] + [int] 时舍入(Obj-C、iOS?)

标签 ios objective-c rounding floating-point-precision

在这种情况下:

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

结果c = 1001。我发现发生这种情况是因为 b 被转换为 float (特定于 iOS),然后 a + b 对于 1000.9999 没有足够的精度和(为什么?)四舍五入到更高的值。如果a0.999f,我们得到c = 1000——理论上是正确的行为。

所以我的问题是为什么 float 四舍五入到更高的值?哪里描述了这种行为(或约定)?

我在 iPhone 模拟器、Apple LLVM 4.2 编译器上对此进行了测试。

最佳答案

int c = a + b中,整数b先转换为 float ,然后转换为2个 float 数字相加,结果被截断为整数。

默认的浮点舍入模式是FE_TONEAREST,这意味着结果 添加的内容

0.99999f + 1000f

是可以表示为 float 的最近数字,即数字1001f。然后,该 float 被截断为整数 c = 1001

如果更改舍入模式

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

然后将加法结果向下舍入(大约为 1000.99993f),您将得到 c = 1000

关于ios - 当 [int] = [float] + [int] 时舍入(Obj-C、iOS?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15832804/

相关文章:

javascript - 让 Math.round 向上舍入到下一分钟,即使超过一秒

c# - 大数四舍五入 [c#]

assembly - x87 可以对 UNsigned QUADword 整数执行精确除法吗?

ios - 如何提取内部响应值并将其传递给UserModel

ios - xcode 6.1 启动屏幕启动图像空白

iphone - 在 iPhone 上使用 FMDB 创建表不起作用

objective-c - 如何将电子邮件正文动态传递给 MFMailComposeViewController

ios - Swift:如何将字典数组添加到数组?

objective-c - 将实例 ID 打印到 NSLog?

objective-c - '-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row' 的类型冲突