Я написал небольшую библиотеку (на C++ 11) для вычисления с помощью кватернионов, но я быстро понял, что существует множество проблем точности и точности, учитывая, что довольно много операций с плавающей запятой вовлечены. Это заставило меня взглянуть на std :: complex и IEEE 754. std :: complex делает довольно много работы, связанной с NaN, в частности. Это единственное, что мне нужно беспокоиться о том, чтобы стать «совместимым с IEEE 754»? В более общем плане, существует ли «рецепт» того, как превратить другую наивную цифровую библиотеку в единицу, которая будет «совместима с IEEE 754»?Как сделать мою библиотеку на C++ совместимой с IEEE 754
Примечание: проблема не в том, является ли компилятор IEEE 754, а о том, должен ли я принимать специальные меры в своих собственных алгоритмах для удовлетворения IEEE 754. В конце концов, я нахожусь в том же положении, как тот, кто писал станд :: complex, и они сделали дополнительные шаги, например для NaNs.
Примечание: если вам нужна скорость, узнайте о [плохой производительности 'std :: complex'] https://www.youtube.com/watch?v=he-XVt1xIE0) – Drop
Спасибо! Действительно, поэтому я планирую сделать совместимость IEEE 754 опциональной. Но документ от Intel (конечно!) Предупредил меня о сбоях в ракетах и многом другом, если моя библиотека не была IEEE-754. – Frank
Операции кватернионов (например, умножение) часто имеют дело с текущими суммами (подписанных) продуктов. Вы можете посмотреть на [Kahan sumation] (https://en.wikipedia.org/wiki/Kahan_summation_algorithm) как относительно недорогой способ повысить точность с соблюдением IEEE-754. Вы также можете посмотреть на относительно зрелую реализацию, такую как класс кватернионов Boost. Я предполагаю, что сложные концепции, такие как ветви разреза и т. Д., В теоретическом смысле приобретают много странности с кватернионами, если вы хотите быть последовательными. –