我正在尝试理解D语言运行时中的一些代码。对于以下两件事似乎有单独的功能:
array1[] += scalar * array2[];
array1[] += array2[] * scalar;
为什么不能用一个功能完成这些操作?我认为即使在不精确的浮点运算中,乘法也是可交换的。
答案 0 :(得分:5)
我猜不同之处仅在于函数原型 - 一个是(double, double[])
而另一个是(double[], double)
。但结果应该是相同的。
答案 1 :(得分:3)
我对D语言一无所知,但我很高兴回答你标题中的问题:
乘法在不精确的浮点运算中是否总是可交换的?
直到NaN值的“有效载荷”,是的。 IEEE-754浮点乘法是可交换的(也是附加的)。如果您不知道NaN的有效负载是什么,请不要担心。