Как воспроизвести это поведение? https://isocpp.org/wiki/faq/newbie#floating-point-arith2Как воспроизвести с плавающей запятой cos (x)! = Cos (x)
Чтобы быть точным, в следующем коде, параметры x
и y
равны; они могут быть равны 1,0 или любому другому значению.
void foo(double x, double y)
{
double cos_x = cos(x);
double cos_y = cos(y);
// the behavior might depend on what's in here
if (cos_x != cos_y) {
std::cout << "Huh?!?\n"; // You might end up here when x == y!!
}
}
Некоторые параметры компилятора? Loop? Есть идеи?
Вы не можете. Все зависит от вашей конфигурации относительно того, что происходит. вот почему есть комментарий '// Вы можете оказаться здесь, когда x == y !!' – NathanOliver
Попробуйте высокоточное (чтение: _very long_) число, которое вы можете напечатать со многими десятичными знаками и посмотреть, что произойдет. –
Вам понадобится старая версия вашего компилятора C, которая все еще генерирует код FPU с ужасным 80-битным внутренним форматом и достаточную энергию для обработки кода, чтобы оптимизатор нарушил его. Это неделя вашей жизни, которую ты никогда не вернешь. Дело в том, что это может произойти без необходимости искать его. –