小编use*_*438的帖子

特殊情况下浮点乘法的相关性

众所周知,IEEE浮点乘法不是关联的.但是,请考虑a,b和c是32位有符号整数(在C中)的特殊情况:

double da = (double) a;

double db = (double) b;

double dc = (double) c;

现在,da*(db*dc) == (da*db)*dc总是返回1?这里,双精度是64位双精度IEEE foating点.正在使用Round-to-even.

我试着用手几个例子,如a = pow(2, 30) + 1,b = pow(2, 30)+1,c = pow(2, 30) + pow(2, 6),数字大到足以保证会有一些四舍五入参与,因为精确的数学答案不具有代表性.

不幸的是我找不到反例.这个表达式看起来可能会返回0.它可能总是返回1吗?为什么?

c floating-point rounding

5
推荐指数
1
解决办法
193
查看次数

标签 统计

c ×1

floating-point ×1

rounding ×1