Вычисление плавающей точки может разойтись в различных процессорах? (+passing удваивается между C# и C),

Мне записали приложение в C#, который вызывает некоторый код C также. Код C# добирается, некоторые удваиваются как вход, выполняет некоторые вычисления на нем, передайте его исходному слою, которые выполняют его собственные вычисления на нем, и затем пасует назад к уровню C#.

Если я выполняю тот же exe/dlls на различных машинах (все они - x64 Intel), действительно ли возможно, что конечный результат, который я получу, будет отличаться на различных машинах?

6
задан skaffman 25 February 2010 в 17:45
поделиться

3 ответа

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

4
ответ дан 17 December 2019 в 07:03
поделиться

Аппаратные средства сами по себе должны делать это одинаково, при условии, что они реализуют операции с плавающей точкой IEEE, а я думаю, что большинство (все?) реализуют.

http://en.wikipedia.org/wiki/IEEE_754-2008

0
ответ дан 17 December 2019 в 07:03
поделиться

Большинство современного оборудования стандартизировано, как и определение double. Вы можете проверить, что оба используют один и тот же тип, проверив объем памяти каждой переменной - например, sizeof (x).

Также должна быть некоторая информация для опроса в float.h.

Насколько я помню, int имеет тенденцию быть более проблематичным с точки зрения согласованности. Некоторые по умолчанию - 2 байта, другие - 4, но вы всегда можете использовать long для обеспечения размера.

0
ответ дан 17 December 2019 в 07:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: