2015-12-01 7 views
0

Номера с плавающей запятой не являются точными из-за его ограниченной точности. Мой вопрос: является ли умножение коммутативным в вычислении компьютера с плавающим числом?Перемножается с плавающей запятой?

Например

double a = ..; 
double b = ...; 
double c = a * b; 
double d = b * a; 
if (c == d) 
    cout << "Yes, great floating"; 
+2

Вы имеете в виду «умножение с плавающей запятой»? Если это так, это может быть актуальным: [Является ли умножение всегда коммутативным в неточной арифметике с плавающей запятой?] (Http://stackoverflow.com/q/5007400/953482) – Kevin

+2

Если оба 'a' и' b' являются NaN, вы бы 't обязательно получить тот же NaN, если вы переключите операнды (но это довольно странно, на что можно положиться) – harold

+1

@harold И вообще, если результат «NaN», то «a * b» и «b * a» будут сравнивать неравномерны, даже если оба результата имеют одинаковое представление. –

ответ

1

Согласно Wikipedia, да, поплавок умножение коммутативно.

Хотя сложение и умножение с плавающей запятой являются коммутативными (a + b = b + a и a × b = b × a), они необязательно являются ассоциативными. То есть (a + b) + c не обязательно равно a + (b + c).

Смежные вопросы