Всегда ли умножение коммутативно в неточной арифметике с плавающей запятой? - PullRequest
4 голосов
/ 15 февраля 2011

Я пытаюсь понять некоторый код во время выполнения языка D.Кажется, что есть две отдельные функции для следующих двух вещей:

array1[] += scalar * array2[];
array1[] += array2[] * scalar;

Почему это нельзя сделать с помощью одной функции?Я думал, что умножение было коммутативным даже в неточной арифметике с плавающей точкой.

Ответы [ 2 ]

5 голосов
/ 15 февраля 2011

Полагаю, разница только в прототипах функций: один - (double, double[]), а другой - (double[], double). Но результат должен быть одинаковым в любом случае.

3 голосов
/ 17 февраля 2011

Я ничего не знаю о языке D, но я с удовольствием отвечу на вопрос в вашем названии:

Является ли умножение всегда коммутативным в неточной арифметике с плавающей запятой?

До "полезной нагрузки" значений NaN, да. IEEE-754 умножение с плавающей точкой является коммутативным (как и сложение). Если вы не знаете, какова полезная нагрузка NaN, не беспокойтесь об этом.

...