На информационном ресурсе применяются cookie-файлы. Оставаясь на сайте, вы подтверждаете свое согласие на их использование.
Точность точки
2820
7
-=Java=-
double a = 3.6d;
double b = 1.2d * 3d;
assertEquals(a, b);
Результат:
junit.framework.AssertionFailedError: expected:<3.6> but was:<3.5999999999999996>
Как с этим в других языках программирования?
Паскаль, С, С#, Basic, Asm и пр.?
double a = 3.6d;
double b = 1.2d * 3d;
assertEquals(a, b);
Результат:
junit.framework.AssertionFailedError: expected:<3.6> but was:<3.5999999999999996>
Как с этим в других языках программирования?
Паскаль, С, С#, Basic, Asm и пр.?
А что с этим можно сделать?) Использовать BigDecimal, который в несколько сот раз медленнее или
"думать" над каждой обработкой плавающих точек.
Меня интересует другое: как с этим делом в других языках программирования.
Почему, если переменная может хранить 3.6, то нельзя точно посчитать результат
(точнее посчитать неточно, но округлить до нужного, точно нельзя из-за двоичной
системы счисления) при перемножении 1.2 и 3?
Я столько лет программирую и никогда не сталкивался с этим вплотную, точнее
не обращал на это внимание.
"думать" над каждой обработкой плавающих точек.
Меня интересует другое: как с этим делом в других языках программирования.
Почему, если переменная может хранить 3.6, то нельзя точно посчитать результат
(точнее посчитать неточно, но округлить до нужного, точно нельзя из-за двоичной
системы счисления) при перемножении 1.2 и 3?
Я столько лет программирую и никогда не сталкивался с этим вплотную, точнее
не обращал на это внимание.
проверять разность по модулю
на значение <=0.00001 (к примеру)
на значение <=0.00001 (к примеру)
Я столько лет программирую и никогда не сталкивался с этим вплотную, точнееЭх вот они современные программисты, нифига не знающие математических основ дискретных вычислений
не обращал на это внимание.

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