-1

Есть в Си Шарп вычисления типа

 Double x=1.11
Double y=2.34
Double z=x+y

Или др. Нужно все время думать о точности результата или тип даёт постоянную, семь или восемь знаков после запятой? Округления делать, думать о предоставлении чисел или просто писать десятичные?

А ошибки операций часто бывают? Компилятор сам может исправить?

CrazyElf
  • 71,194
  • 1
    Числа с плавающей точкой хранятся в экспоненциальной форме, т.е. мантисса + двоичный порядок. Соответственно, всякий раз, когда получается результат более высокого порядка, вы теряете в абсолютной точности числа (точность мантиссы при этом всегда фиксирована). – LShadow77 Sep 19 '21 at 12:37
  • Но думать надо все время о точности или её гарантирует язык? Можем просто складывать, умножать? – user2874493 Sep 19 '21 at 14:57
  • Спасибо за ответ. Можем просто ограничиться тем, что результат примерный? – user2874493 Sep 19 '21 at 14:58
  • 1
    Смотрите в прилинкованный в синей плашке вверху ответ. – aepot Sep 19 '21 at 15:30
  • @user2874493 Если у вас лимиты всего 1 знак до и 2 знака после запятой - float вам будет более чем достаточно, если числа больше и точность после запятой нужна выше - читайте статью: https://habr.com/ru/post/201066/ – Blackmeser Sep 20 '21 at 05:02

1 Answers1

1

Если хотите практически точных вычислений, то используйте специальный тип decimal, он есть не только в C#, но и во многих других языках, потому что программы часто пишут и для банков, например, а никто не хочет, чтобы у него деньги неточно считались, этот тип специально придумали для денежных и прочих точных вычислений. Он работает медленнее, чем float и double, но зато он способен хранить и обрабатывать числа с минимальной потерей точности.

А вообще воспользуйтесь поиском, тут много раз обсуждались проблемы с неточностью чисел с плавающей точкой.

CrazyElf
  • 71,194
  • Но для обычных, не банков децимал все же или дабл? – user2874493 Sep 19 '21 at 16:07
  • Просто у меня конкретный вопрос, округление. А в децимал не надо про это думать? – user2874493 Sep 19 '21 at 16:08