Несвязанный код меняет результаты расчета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
Почему это происходит и есть ли простой способ избежать этого? Что-то связано с регистрами?

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