Рассмотрим
#include <iostream>
int main()
{
double a = 1.0 / 0;
double b = -1.0 / 0;
double c = 0.0 / 0;
std::cout << a << b << c; // to stop compilers from optimising out the code.
}
Я всегда думал, что a
будет + Inf, b
будет -Inf, а c
будет NaN. Но я также слышу слухи, что строгое поведение деления с плавающей запятой на ноль undefined, и поэтому приведенный выше код не может считаться портативным С++. (Это теоретически уничтожает целостность моего миллиона строк плюс код.).
Кто исправит?
Примечание. Я доволен реализацией, но я говорю о поведении кошачьих, демонах чихания undefined здесь.