Я пытаюсь включить программную плавающую точку в gcc, следуя предложениям в этот вопрос , но я наткнулся на загвоздку:
Флаг -msoft-float вызывает:
/usr/include/c++/4.8.2/bits/basic_string.h: In function ‘long double std::stold(const string&, std::size_t*)’:
/usr/include/c++/4.8.2/bits/basic_string.h:2857:47: error: x87 register return with x87 disabled
stold(const string& __str, size_t* __idx = 0)
^
и -mno-sse причины:
/usr/include/c++/4.8.2/bits/basic_string.h: In function ‘float std::stof(const string&, std::size_t*)’:
/usr/include/c++/4.8.2/bits/basic_string.h:2849:46: error: SSE register return with SSE disabled
stof(const string& __str, size_t* __idx = 0)
^
Существует пара вопросов , в которых упоминается эта ошибка, но в отношении программирования ядра, которое не помогает.
Все, что происходит в basic_string - это функции, возвращающие числа с плавающей запятой или двойные числа Почему это приводит к сбою компиляции?
Что более важно, что я могу с этим поделать?
Фон
Я обнаружил разницу в поведении приложения C ++ на двух разных платформах:
- Intel (R) Xeon (R) CPU E5504
- Процессор Intel (R) Core (TM) i5-3470
Код, скомпилированный изначально на одной машине, работает на другой, но
для одного теста поведение зависит от того, на какой машине запущен код.
Разъяснение
Исполняемый файл, скомпилированный на компьютере A, ведет себя как исполняемый файл, скомпилированный на компьютере B, когда копируется для запуска на компьютере B и наоборот.
Это может быть неинициализированная переменная или многое другое, но
Я подозреваю, что причиной могло быть непереносимое использование плавающей запятой.
Возможно, одна машина интерпретирует сборку с плавающей запятой иначе, чем другая?
Я хочу проверить свою гипотезу.
Я подумал, что если я смогу заставить программу использовать (в идеале строгий IEE 754) программный метод с плавающей запятой, это может подтвердить или исключить это.
Это не мой код, и у меня нет желания полностью переписывать его, чтобы проверить это. Перекомпиляция это хорошо, хотя.
В связи с этим я задал отдельный вопрос Как обнаружить различия в поведении с плавающей точкой на разных платформах Решая вопрос с другой стороны.