В этой флеш игре много игроков, включая меня и некоторых друзей.Мы заметили, что одно и то же может работать по-разному для разных людей.Математика в симуляции, безусловно, виновата.Является ли причина в аппаратном обеспечении, ОС, браузере, 32-битном / 64-битном и т. Д., На самом деле неизвестно.Но с комбинациями, с которыми мы должны тестировать, мы получили 5 различных конечных результатов из одних и тех же начальных условий симуляции и, вероятно, можем получить больше.
Это заставляет меня задуматься, имеет ли ActionScript плавающийточечная математическая спецификация? Если это так, что она говорит о точности и детерминизме вычислений?
Я сравниваю с Java, в котором проводится различие между обычной математикой с плавающей точкой с классом Math
и детерминированным плавающимуказать классом StrictMath
и ключевым словом strictfp
.Оба всегда находятся в пределах 1 ulp от точного результата, это также подразумевает, что обычная математика и строгая математика всегда дают результаты в пределах 1 ulp друг от друга для одной операции или вызова функции.Документы очень ясно об этом.Я ожидаю, что другие респектабельные языки будут иметь что-то похожее, скажем, насколько точны их вычисления с плавающей запятой и если они дают одинаковые результаты везде.
Обновление, так как некоторые люди говорят, что игра нечестная:
Некоторые другие разобрали swf и даже сделали для него моды, они увидели игровой движок и могут подтвердить, что здесь нет случайности.Box2d используется для его физики.Если при последующих запусках дизайн когда-либо работал иначе, он фактически изменился из-за некоторой ошибки, обычно это видимая разница, но если нет, вы можете проверить необработанные данные с помощью этого инструмента и увидеть, чторазные.Разные начальные условия, как и ожидалось, дают разные конечные результаты.
Что касается того, что мы знаем до сих пор, это результаты на тестовом уровне:
![Large table showing 5 different results for various users.](https://i.stack.imgur.com/9dm9I.png)
Например, если я использую 32-разрядную версию Chrome на своем настольном компьютере (AMD A10-5700 в качестве процессора), я всегда получу результат «946 тиков».Но если я вместо этого запускаю Firefox или Internet Explorer, я всегда получаю результат «794 тиков».