0

Для моего детерминированного механизма физики мне нужно подтвердить, что вычисления с удвоениями на C# достаточно согласованы на нескольких платформах. Кто-нибудь знает, насколько разные функции отличаются от результатов? На моем компьютере как разрядное приложение для Windows 32, эти результаты (Примечание: Псевдо-код):Является ли двойная математика последовательной на нескольких платформах?

double x = 123.123; 
x * 2 = 246.246 
Math.Pow (x, 2) = 15159.273129 
Math.Sqrt (x) = 11.0960803890383 
Math.Sin (x) = -0.56537391969734 

Я до сих пор не знаю, если одни и те же результаты будут появляться на других платформах или других языках (I используя C#). Если вам нужна дополнительная информация, я поставлю ее как можно быстрее. Пожалуйста, если кто-нибудь, у кого есть знания или время, чтобы помочь проверить вычисления на других платформах, помогите мне преодолеть эту неопределенность.

+0

Это не точный дубликат, но вы можете получить некоторое представление о вопросе и ответах в [Согласование с плавающей точкой в ​​кросс-платформе] (http://stackoverflow.com/questions/20963419/cross-platform-floating-point-consistancy). – Simon

+0

http://stackoverflow.com/questions/28389634/is-double-math-deterministic-enough-for-physics-simulations http://stackoverflow.com/questions/7365790/how-can-floating-point-calculations- be-made-детерминированный http://stackoverflow.com/questions/20963419/cross-platform-floating-point-consistancy –

+0

О, спасибо. Я проверю эти ссылки. – JPtheK9

ответ

0

Стандарт C# ECMA-334, говорит в разделе 11.1.6 плавающих типов «операция с плавающей точкой может быть выполнена с более высокой точностью, чем тип результата операции.».

Учитывая такое правило, вы не можете быть уверены в том, чтобы получить точно такой же ответ повсюду. «может» означает, что некоторые реализации могут использовать более высокую точность, чем другие, для одного и того же вычисления.

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

Расчеты различаются тем, насколько чувствительны они к небольшим изменениям в входах. В крайнем случае это моделирование некоторых физических систем, таких как погода, где крошечные изменения в входе могут расширяться до больших изменений в результатах.

Один из способов получить представление о поведении вашего моделирования заключается в том, чтобы преднамеренно нарушить некоторые значения, например. одна часть в 1е15. Означает ли это, что результаты достаточно значительны? Однако всегда будет существовать риск того, что некоторые входы приведут к менее стабильным условиям, чем другие.

+0

О, спасибо за информацию. Мне нужна только точность, так как различия не заметны. Каков максимальный результат расчета может отличаться? Мне нужно, чтобы он был достаточно точным для видеоигры. – JPtheK9

+0

Это будет чрезвычайно зависеть от того, какие вычисления вы делаете. –

+0

Считаете ли вы, что это будет хорошо для расчетов, перечисленных выше? Я оценил около 7 200 000 каждый в одной игре. – JPtheK9

Смежные вопросы