none
Непонятный результат умножения в .net RRS feed

  • Вопрос

  • Всем доброго времени суток!

    Кто знает, почему в VS2010 операция 2*0.00001 выдает  результат 0.000020000000000000002 ???? И как этого можно избежать при расчётах?

    • Перемещено Abolmasov Dmitry 13 октября 2011 г. 12:04 (От:Разное)
    13 октября 2011 г. 8:59

Ответы

  • В двоичной системе счисления, число 0.00001 можно представить только бесконечной периодической дробью, а значит с точностью до машинного эпсилона. Отсюда и погрешность. Но на самом деле вас это не должно смущать, такого рода погрешности есть всегда при работе с дробными числами.


    • Изменено Algol36Editor 13 октября 2011 г. 9:23
    • Помечено в качестве ответа Abolmasov Dmitry 13 октября 2011 г. 12:03
    13 октября 2011 г. 9:23
    Отвечающий

Все ответы

  • Так происходит из-за неточности стандарта double или float. Вместо них используйте decimal, если вам нужно точные расчеты:

                decimal a = 0.000001m;
                Console.WriteLine(  a*2);
    


    Для связи [mail]
    13 октября 2011 г. 9:22
  • В двоичной системе счисления, число 0.00001 можно представить только бесконечной периодической дробью, а значит с точностью до машинного эпсилона. Отсюда и погрешность. Но на самом деле вас это не должно смущать, такого рода погрешности есть всегда при работе с дробными числами.


    • Изменено Algol36Editor 13 октября 2011 г. 9:23
    • Помечено в качестве ответа Abolmasov Dmitry 13 октября 2011 г. 12:03
    13 октября 2011 г. 9:23
    Отвечающий
  • Спасибо за помощь!

     

    13 октября 2011 г. 9:38