Стандарт C (и C ++: [expr.7.1.6] и Fortran ), состояния:
Значения плавающих операндов и результаты плавающих выражений могут быть представлены с большей точностью и диапазоном, чем требуется типом; типы не меняются.
Некоторые компиляторы по умолчанию используют более высокую точность для результатов выражений с плавающей точкой (GCC, MSVC), а некоторые компиляторы - нет (Clang), но большинство из них (не все) соответствуют стандарту и предоставляют способ управления поведение сжатия с плавающей точкой.
Я пишу программы, которые делают много арифметики с плавающей точкой.
Существует ли общая рекомендация о том, следует ли включать или отключать сокращение по умолчанию? Или я должен решить это в каждом конкретном случае? Если да, что я должен рассматривать в качестве аргументов за или против включения сокращения по умолчанию для всего приложения?
Этот другой ответ ( Разрешено ли сжатие выражений с плавающей точкой в C ++? ) объясняет, что такое сжатие и каковы стандартные правила, но не дает совета о том, как его использовать. Я испытал как некоторые преимущества (например, более быстрая производительность), так и некоторые недостатки (например, очень трудно отлаживать ошибки) сокращения, но хотел бы знать, существует ли в сообществе консенсус относительно того, что рекомендуется делать по умолчанию, или это так из тех вещей, которые должны решаться в каждом конкретном случае (и если это так, как мне решить это заранее?).