А что с этим можно сделать?) Использовать BigDecimal, который в несколько сот раз медленнее или
"думать" над каждой обработкой плавающих точек.
Меня интересует другое: как с этим делом в других языках программирования.
Почему, если переменная может хранить 3.6, то нельзя точно посчитать результат
(точнее посчитать неточно, но округлить до нужного, точно нельзя из-за двоичной
системы счисления) при перемножении 1.2 и 3?
Я столько лет программирую и никогда не сталкивался с этим вплотную, точнее
не обращал на это внимание.
Ну вот, обидели ни за что ни про что. Ну при чём здесь основы? Сможете без проблем сходу перемножить дроби в двоичной системе никуда не заглядывая и объяснить, почему нельзя округлять до "точного" результата (там +- 1 бит), постоянно программируя на языке высокого уровня - респект и уважуха. Я пока не могу, ибо в последний раз дроби видел лет 6 назад и то теории ради - нет задач. Тем более во многих языках это скрыто. То что не всегда можно получить точный результат для дробей, оперируя битами - я знаю.
Только что посмотрел: в Си и в Бейсике при выводе проблема "умалчивается" (чтобы увидеть неточность надо приложить усилия). Почему-то из всех языков припоминаю только Фортран - там эта проблема всплыла явно при выводе, но установленного нету, а искать - лень.
Вот и возник вопрос, есть ли среды, где происходит округление неточного результата, если при операциях получить точное
число нельзя. Пока получилось, что Си, Бэйсик идут в направлении округления в представлении, Джава, Фортран - нет.
Мне единственное было интересно, есть ли язык/платформа, где работа с плавающей точкой организована иначе и предпринимаются какие-то меры
для повышения точности. В Джава можно получать точные значения, используя BigDecimal. А где это "встроено" в платформу?