gcc реализует опцию -fexcess-precision
, но только для C.
Документацию для опции можно найти здесь (поиск -fexcess-precision
)(это руководство по gcc 4.6.3):
-fexcess-precision=
style
Этот параметр позволяет дополнительно контролировать избыточную точность на станках с плавающей точкойрегистры имеют большую точность, чем типы IEEE float
и double
, и процессор не поддерживает операции округления до этих типов.
[SNIP]
-fexcess-precision=standard
не реализован для языков, отличных от C, и не действует, если указано -funsafe-math-optimizations
или -ffast-math
.На x86 это также не действует, если указано -mfpmath=sse
или -mfpmath=sse+387
;в первом случае семантика IEEE применяется без излишней точности, а во втором округление непредсказуемо.
Вы сказали нам, что (a) вы компилируете C ++, (b) ваш скриптили Makefile
использует -fexcess-precision
, и (c) вы не можете его изменить.Один из тех, кто должен дать.У вас есть ошибка в вашем скрипте или Makefile
, и вам нужно ее исправить.
Обратите внимание, что gcc, вероятно, должен реализовать -fexcess-precision=standard
для C ++;Насколько я знаю, правила C ++ в этой области такие же, как C, и C требует такого поведения для стандартного соответствия.Возможно, ваш код зависит от поведения, указанного -fexcess-precision=standard
, и что gcc просто не поддерживает его.Если это так, у вас есть проблема;может случиться так, что единственный способ обойти это - сделать серьезные изменения в исходном коде C ++.Или, может быть, он реализует правильное поведение для C ++;руководство не является на 100% ясным по этому вопросу.
Существует еще один возможный обходной путь.Вы можете написать свою собственную оболочку для команды g++
, которая вызывает настоящую команду g++
после удаления любых вхождений -fexcess-precision
из аргументов командной строки.Я сделал нечто подобное в прошлом, для немного другой ситуации;вам придется взломать его, чтобы изменить аргументы командной строки вместо фильтрации stderr
.Но я не рекомендую это.Правильным решением является исправление сценария сборки или Makefile
- при условии, опять же, что программа не зависит от поведения, указанного в -fexcess-precision=standard
.