Я хотел бы реализовать функцию frac в C # (точно так же, как здесь, в hsl http://msdn.microsoft.com/en-us/library/bb509603%28VS.85%29.aspx), но так как она предназначена для очень ресурсоемкого приложения, я хотел бы выбрать лучшую возможную версию. Я использовал что-то вроде
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));
}
Но мне интересно, есть ли лучший способ, не прибегая к десятичным дробям ...