Могу ли я использовать округление для обеспечения детерминизма атомарных операций с плавающей запятой?

Я разрабатываю приложение на C, которое требует детерминизма с плавающей запятой. Я также хотел бы, чтобы операции с плавающей запятой были достаточно быстрыми. Сюда входят стандартные трансцендентные функции, не указанные в IEEE754, такие как синус и логарифм.Рассмотренные мной программные реализации с плавающей запятой относительно медленны по сравнению с аппаратными реализациями с плавающей запятой, поэтому я рассматриваю возможность просто округлить один или два наименее значимых бита из каждого ответа. Потеря точности - адекватный компромисс для моего приложения, но будет ли этого достаточно для обеспечения детерминированных результатов на разных платформах? Все значения с плавающей запятой будут двойными.

Я понимаю, что порядок операций - еще один потенциальный источник расхождений в результатах с плавающей запятой. У меня уже есть способ решить эту проблему.

Было бы замечательно, если бы существовали программные реализации основных аппаратных реализаций с плавающей запятой, используемых сегодня, чтобы я мог напрямую проверить такую ​​гипотезу.

6
задан Harry Collins 10 February 2012 в 23:00
поделиться