Я хотел бы реализовать функцию frac в C# (точно так же, как в hsl здесь http://msdn.microsoft.com/en-us/library/bb509603%28VS.85%29.aspx), но поскольку это приложение с очень интенсивным процессором, я бы хотел, чтобы лучшая версия была возможна. Я использую что-то вродеСамая быстрая реализация функции frac в C#
public float Frac(float value)
{
return value - (float)Math.Truncate(value);
}
но у меня возникают проблемы точности, например, для 2.6f это возвращение в модульном тесте
Ожидаемое: 0.600000024f Но был: 0.599999905f
Я знаю, что я могу преобразовать в десятичное значение, а затем в конце обращенным плавать, чтобы получить правильный результат что-то вроде этого:
public float Frac(float value)
{
return (float)((decimal)value - Decimal.Truncate((decimal)value));
}
Но мне интересно, если есть лучший ва y, не прибегая к десятичным знакам ...
Я думаю, что пока буду использовать десятичные числа. По крайней мере, до тех пор, пока не найдет отбойник и самое быстрое решение ... –
Я закончил использование (float) ((десятичное) значение% 1,0 м), которое, я думаю, все еще медленное, но, по крайней мере, работает –