Являются ли операции с плавающей запятой в Delphi детерминированными?
I.E. получу ли я тот же результат от идентичной математической операции с плавающей запятой в том же исполняемом файле, скомпилированном с помощью компилятора Delphi Win32, как и с компилятором Win64, или компилятором OS X, или компилятором iOS, или компилятором Android?
Это важный вопрос, поскольку я реализую поддержку многопользовательской игры в своем игровом движке, и меня беспокоит, что результаты прогнозирования на стороне клиента очень часто могут отличаться от окончательного (и авторитетного) определения сервера.
Следствием этого может быть появление «запаздывания» или «рывков» на стороне клиента, когда достоверные данные о состоянии игры преобладают над прогнозируемым состоянием на стороне клиента.
Поскольку на самом деле у меня нет возможности протестировать десятки различных устройств на разных платформах, скомпилированных с помощью разных компиляторов, в чем-либо, напоминающем «контролируемое состояние», я считаю, что лучше всего задать этот вопрос разработчикам Delphi, чтобы узнать, есть ли у кого-нибудь имеет внутреннее понимание детерминизма с плавающей запятой на низком уровне компиляторов.
sin
илиcos
, я не думаю, что вы можете ожидать таких же результатов. Если вы ограничите вопрос 4 арифметическими операциями для типаDouble
илиSingle
, возможно, вы сможете добиться тех же результатов, но мне не нравится идея полагаться на него, потому что изменение режима плавающей операции может изменить результат плавающей операции даже для одного Платформа. - person kludg   schedule 22.06.20141.0/10.0
без приближения. - person David Heffernan   schedule 22.06.20141.0 / 1.0
, что служит отличным контрпримером к вашему широкому и всеобъемлющему утверждению о математике с плавающей запятой. Здесь нет необходимости рассматривать1.0 / 10.0
. - person tmyklebu   schedule 22.06.2014