Я думаю, что GCC довольно хорошо задокументирован, поэтому я не собираюсь раскрывать свое собственное невежество, пытаясь ответить на части вашего вопроса о его возможностях и их последствиях. Тем не менее, я бы сделал общее заявление о том, что, когда речь идет о точности и производительности, это приносит большие дивиденды при чтении руководства. Умные люди, работающие над GCC, прилагают много усилий к своей документации, читая, что это полезно (хорошо, это может быть немного скучно, но, черт возьми, это руководство по компилятору, а не сборщик).
Если для вас важно, чтобы вы получали числовые результаты, идентичные последним битам, вам придется задуматься не только о GCC и о том, как вы можете контролировать его поведение. Вам нужно будет заблокировать библиотеки, которые он вызывает, оборудование, на котором он работает, и, возможно, ряд других факторов, о которых я еще не думал. В худшем (?) Случае вы можете даже захотеть, и я видел, как это сделано, написать свои собственные реализации математики f-p, чтобы гарантировать битовую идентичность на разных платформах. Это сложно и, следовательно, дорого, и оставляет вас, возможно, менее уверенным в правильности вашего собственного кода, чем в коде, используемом GCC.
Тем не менее, вы пишете
Меня не волнует точность этого конкретного кода, поэтому я могу быть в порядке с пониженной точностью, если это принесет надежность
, который задает вам вопрос - почему бы вам просто не использовать точность в 5 десятичных цифр в качестве стандарта (уменьшенной) точности? Это то, что очень многие из нас в области вычислительной техники делают все время; мы игнорируем более тонкие аспекты численного анализа, поскольку их трудно и дорого обходить во время вычислений. Я думаю о таких вещах, как интервальная арифметика и математика высокой точности. (Конечно, если 5 не подходит вам, выберите другое однозначное число.)
Но хорошая новость заключается в том, что это вполне оправданно: мы имеем дело с научными данными, которые по своей природе сопровождаются ошибками (конечно, мы обычно не знаем, что это за ошибки, но это другое дело), поэтому можно игнорировать последние несколько цифр в десятичном представлении, скажем, 64-битного числа fp. Идите прямо вперед и игнорируйте еще несколько из них. Более того, не имеет значения, сколько битов у ваших чисел f-p, вы всегда будете терять точность при выполнении численных расчетов на компьютерах; добавление большего количества бит просто возвращает ошибки как к младшим битам, так и к концу длительных вычислений.
Вам следует остерегаться случая, когда у вас такой плохой алгоритм или плохая реализация алгоритма, что он быстро теряет много точности. Обычно это проявляется при любом разумном размере числа f-p. Ваш набор тестов должен был разоблачить это, если это реальная проблема для вас.
В заключение: вам нужно каким-то образом бороться с потерей точности, и не обязательно неправильно чистить более мелкие детали под ковром.