Size: a a a

2019 August 25

DP

Dmitry Ponyatov in ru.nim.talks
Zhenya Katataev
Я как раз только что проверил и 0.2 + 0.1 в float64 в nim выдал 0.3. Чудеса!!!
Первый курс любой ИТшной специальности любого (негуманитарного) вуза, предмет "численные методы", первая лекция - "Погрешности численных методов"
источник

ZK

Zhenya Katataev in ru.nim.talks
Dmitry Ponyatov
Первый курс любой ИТшной специальности любого (негуманитарного) вуза, предмет "численные методы", первая лекция - "Погрешности численных методов"
Я знаю, но это должно произойти в float64, а не в float32
источник

DP

Dmitry Ponyatov in ru.nim.talks
Zhenya Katataev
Я знаю, но это должно произойти в float64, а не в float32
stdlib округляет где-нибудь в printf, чтобы увидеть - надо double распотрошить побитно по спекам IEEE
источник

DP

Dmitry Ponyatov in ru.nim.talks
практически все эти дельты вылазят на итеративных методах, на циклах в 10e5 шагов, при сложении/умножении очень больших и очень маленьких чисел, в книжках целые главы посвящены как обходить ьакте накопления ошибок
источник

ZK

Zhenya Katataev in ru.nim.talks
Dmitry Ponyatov
stdlib округляет где-нибудь в printf, чтобы увидеть - надо double распотрошить побитно по спекам IEEE
Я не понимаю почему нельзя поменять стандарт или сделать хотя бы альтернативу
источник

DP

Dmitry Ponyatov in ru.nim.talks
Zhenya Katataev
Я не понимаю почему нельзя поменять стандарт или сделать хотя бы альтернативу
альтернативу законам дискретной математики?
источник

DP

Dmitry Ponyatov in ru.nim.talks
Делают, учитывают, вносят коррекции, если удается решить задачу аналитически - всей кафедрой неделю бухают
источник

DP

Dmitry Ponyatov in ru.nim.talks
вон даже десятичные дроби точно складывать приходится переводом в рациональные дроби
источник

ZK

Zhenya Katataev in ru.nim.talks
Dmitry Ponyatov
альтернативу законам дискретной математики?
Я не думаю, что дело в этом. Например: языки ориентирующийся на архитектуру выдаст -10//3 == -3 и  -10%3 == -1. Неужели так сложно пофиксить.
источник

ZK

Zhenya Katataev in ru.nim.talks
Dmitry Ponyatov
вон даже десятичные дроби точно складывать приходится переводом в рациональные дроби
Без этого не куда.
источник

A

Andrew in ru.nim.talks
Zhenya Katataev
Я как раз только что проверил и 0.2 + 0.1 в float64 в nim выдал 0.3. Чудеса!!!
Вспомнил случай - в одном языке программирования был Issue о том, что язык считал 0.1+0.2==0.3, а автор issue потребовал 0.3000000004. Вот что значит совсем крыша поехала.
источник

A

Andrew in ru.nim.talks
Zhenya Katataev
Я не думаю, что дело в этом. Например: языки ориентирующийся на архитектуру выдаст -10//3 == -3 и  -10%3 == -1. Неужели так сложно пофиксить.
Если ты про разницу между всякими mod и modulo, то тут не ошибка, а просто кто-то не прочитал доку ))
источник

DP

Dmitry Ponyatov in ru.nim.talks
Andrew
Вспомнил случай - в одном языке программирования был Issue о том, что язык считал 0.1+0.2==0.3, а автор issue потребовал 0.3000000004. Вот что значит совсем крыша поехала.
Значит автор issue хотел видеть именно представление float которое реально лежит в памяти, а не округленка. Еще раз для тех кто на лекции не ходил - точного представления для таких чисел как .1 .2 .3 в стандартном формате плавающей точки IEEE754 не.существует
источник

DP

Dmitry Ponyatov in ru.nim.talks
Запусти int main() printf("%.32f", 3e-1) и убедись лично
источник

DP

Dmitry Ponyatov in ru.nim.talks
Будет .299...999989776975374843
источник

DP

Dmitry Ponyatov in ru.nim.talks
Но смысл issue конечно не понятен - почти всегда есть способ настроить формат вывода с нужной точностью. В ниме.formatFloat(ffDecimal,32)
источник

A

Andrew in ru.nim.talks
Dmitry Ponyatov
Значит автор issue хотел видеть именно представление float которое реально лежит в памяти, а не округленка. Еще раз для тех кто на лекции не ходил - точного представления для таких чисел как .1 .2 .3 в стандартном формате плавающей точки IEEE754 не.существует
Надо считать правильно, а не как диктует корявый стандарт
источник

A

Andrew in ru.nim.talks
Ещё бы прописали в стандарте, что пи равен трём
источник

DP

Dmitry Ponyatov in ru.nim.talks
С этим приколом лично сталкаивался. Сидит доктор технических (!) наук и матерится. Подходим, выясняем. Он два дня долбается с микроскопической расчетной программкой. Показывает: вот долбаный интеграл sin x от сих до сих. Берем школьный учебник, считаем на калькуляторе (показывает) от 0 до пи, может калькулятор глючит, не вот два, аналитически тоже два. Запускаем программу, классический метод трапеций, дробь нах ошибка в 4 знаке
источник

DP

Dmitry Ponyatov in ru.nim.talks
Ну ок, погрешность, уменьшаем шаг интегрирования, шо за нах ошибка во второй знак уползла. Начинаем объяснять, шум, мятюки. Проф молча встает из за соседнего стола, и молча выходит из комнаты. Минут 10 воплей и визгов. Дверь открывается пинком, проф марширует к столу с огромным толстенным томом страниц на 800, ебашит его со всей дури плашмя об стол и орет НА ЧИТАЙ!!!
источник