История изменений
Исправление GPFault, (текущая версия) :
Писал на С++. Решил заменить отдельные min
и max
на minmax
. Потом компания потратила 3 человеконедели на поиск трудновоспроизводимой ошибки, иногда дающей неверный результат вычислений на некоторых платформах.
Минимальный пример невалидного кода:
#include <iostream>
#include <algorithm>
int getx1(){return 0;}
int getx2(){return 1;}
int main()
{
auto min_max = std::minmax(getx1(), getx2());
auto min = std::min(getx1(), getx2());
auto max = std::max(getx1(), getx2());
std::cout << "ok:" << min << " " << max << "\n";
std::cout << "undefined behavour:" << min_max.first << " " << min_max.second << "\n";
return 0;
}
Почему последний вывод в cout невалидный - остаётся заданием для лоровцев.
Исходная версия GPFault, :
Писал на С++. Решил заменить отдельные min
и max
на minmax
. Потом компания потратила 3 человеконедели на поиск трудновоспроизводимой ошибки, иногда дающую неверный результат вычислений на некоторых платформах.
Минимальный пример невалидного кода:
#include <iostream>
#include <algorithm>
int getx1(){return 0;}
int getx2(){return 1;}
int main()
{
auto min_max = std::minmax(getx1(), getx2());
auto min = std::min(getx1(), getx2());
auto max = std::max(getx1(), getx2());
std::cout << "ok:" << min << " " << max << "\n";
std::cout << "undefined behavour:" << min_max.first << " " << min_max.second << "\n";
return 0;
}
Почему последний вывод в cout невалидный - остаётся заданием для лоровцев.