У нас есть игра, которая должна быть детерминированной, поскольку она является частью его многопользовательской модели. Мы также используем Lua, который использует sprintf
внутри (формат %.14g
).
Проблема возникает, когда печатает число, например 0,00001. В некоторых случаях он печатает 1e-05
, а в некоторых других случаях он печатает 1e-005
(дополнительный ноль).
Например, при компиляции с Visual Studio 2015 он печатает 1e-005
, а с Visual studio 2013 он печатает 1e-05
. Я пробовал разные настройки локали, но, похоже, это не имеет никакого эффекта.
Вопрос: Какое наилучшее решение для достижения детерминированных результатов? Меня не волнует, стандартизирована или исключена научная нотация.
Решения, о которых я думал:
- Когда я использую нотацию
%f
, она не игнорирует незначительные нули, поэтому наличие%.14f
приведет к непрактично длинным номерам. - Использование пользовательского метода
sprintf
(копия, вставленная из некоторых стандартных библиотек) - Используя какой-то специальный формат, о котором я не думал (я использую только это как ссылку: http://www.cplusplus.com/reference/cstdio/printf/)