Несвязанный код меняет результаты расчетаC#

Место общения программистов C#
Ответить
Anonymous
 Несвязанный код меняет результаты расчета

Сообщение Anonymous »

У нас есть код, который на некоторых машинах дает неожиданные результаты. Я сузил это до простого примера. В приведенном ниже фрагменте linqpad методы GetVal и GetVal2 имеют по существу одинаковую реализацию, хотя первый также включает проверку NaN. Однако результаты, возвращаемые каждым из них, разные (по крайней мере, на моей машине).

Код: Выделить всё

void Main()
{
var x = Double.MinValue;
var y = Double.MaxValue;
var diff = y/10 - x/10;

Console.WriteLine(GetVal(x,6,diff));
Console.WriteLine(GetVal2(x,6,diff));
}

public static double GetVal(double start, int numSteps, double step)
{
var res = start + numSteps * step;
if (res == Double.NaN)
throw new InvalidOperationException();
return res;
}

public static double GetVal2(double start, int numSteps, double step)
{
return start + numSteps * step;
}
Результаты

Код: Выделить всё

3.59538626972463E+307
Infinity
Почему это происходит и есть ли простой способ избежать этого? Что-то связано с регистрами?

Подробнее здесь: https://stackoverflow.com/questions/465 ... alculation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»