Pull to refresh
72
0
Артём Караваев @ArtemKaravaev

Математик-программист

Send message

Учебный видео-курс по арифметике с плавающей запятой в формате IEEE-754. Часть I

Reading time4 min
Views4.9K
Арифметика с плавающей запятой хорошо понятна далеко не всем программистам. Раньше я работал в разных IT-фирмах и с удивлением обнаруживал, что даже опытные программисты теряются, когда возникает задача подобрать $\varepsilon$ для сравнения двух чисел с плавающей запятой в коде вроде такого:

if (abs (a-b) < EPS) . . .

Они наивно выбирали одно и то же число типа 1e-8 для всех своих проектов, создавая тем самым потенциальное место проявление суровых ошибок. Более того, они пытались сравнивать два числа типа double вот так:

if (a < b) . . .

не понимая, за что же я их ругал, когда видел подобные глупости. Я уже не говорю о том, какой ужас могла вызвать константа типа 0x400921fb54442d18 (всего лишь число $\pi$), которую можно увидеть в некоторых старых программах или на экране отладчика.


Читать дальше →
Total votes 16: ↑12 and ↓4+8
Comments5

Наиболее точное скалярное произведение векторов типа double. Вычисление значения полинома

Reading time7 min
Views11K
В прошлой статье речь шла о том, как можно сложить массив из чисел типа double наиболее точно, то есть получить такую сумму, как если бы мы выполняли вычисления в рамках арифметики с бесконечной точностью, а затем один раз округлили бы результат. Был показан алгоритм, который эквивалентен применению типа данных double-double, в котором сложение происходит сразу в двух переменных: основная сумма и хвостик-погрешность. Опытные читатели сразу догадались, что сложение хвостиков-погрешностей также допускает по отношению к себе рекурсивное применение того же алгоритма, что приводит не к удвоенной, а к утроенной точности, и вообще, можно организовать каскад сложений произвольного размера, получая любую наперёд заданную точность расчётов, поэтому фактически в прошлой статье была показана предпосылка к так называемой «дробной длинной арифметике». Опытный программист без труда разберётся как её реализовать, ну а я обещал дать аналогичные фундаментальные основы для скалярного произведения и вычисления полинома в точке. Поскольку все базовые вводные слова уже были сказаны в двух предшествующих статьях, в этой будет меньше «воды» и «лишних», по мнению опытных математиков, сведений. Прошу под кат.

Total votes 41: ↑41 and ↓0+41
Comments33

Можно ли сложить N чисел типа double наиболее точно?

Reading time13 min
Views27K

В предыдущих сериях…


Прошлая статья рассказала о двух способах сложения двух двоичных чисел с плавающей запятой без потери точности. Чтобы добиться этого, мы представили сумму c=a+b в виде двух чисел (s,t)=a+b, причём таких, что s — наиболее близкое к a+b точно-представимое число, а t=(a+b)-s — это отсекаемая в результате округления часть, составляющая точную погрешность. У читателей был вопрос: а можно ли достаточно точно сложить массив чисел типа double? Оказывается, можно! Но только, вероятно, не всегда и не абсолютно… и не алгоритмом Кэхэна, который тогда вспоминали в комментариях. За подробностями прошу под кат, где мы и найдём приложение тому, о чём я рассказал в прошлый раз.


Total votes 76: ↑76 and ↓0+76
Comments45

Сложение двух чисел с плавающей запятой без потери точности

Reading time9 min
Views78K
Здравствуйте, друзья, как вы думаете, если мы напишем такой код:

s = a+b;
z = s-a;
t = b-z;

то не кажется ли вам, что в результате его выполнения получится, что t=0? С точки зрения привычной математики действительных чисел это и правда так, а вот с точки зрения двоичной арифметики с плавающей запятой в переменной t будет кое-что другое. Там будет то, что спасает нас от потери точности при сложении чисел $a$ и $b$. Кого интересует данная тема, прошу под кат.

Total votes 139: ↑137 and ↓2+135
Comments172

Table-Maker's Dilemma, или почему почти все трансцендентные элементарные функции округляются неправильно

Reading time19 min
Views8.1K
С удивлением обнаружил, что на русском языке трудно отыскать информацию по данной проблеме, как будто мало кого волнует, что математические библиотеки, используемые в современных компиляторах, иногда не дают корректно-округлённого результата. Меня эта ситуация волнует, так как я как раз занимаюсь разработкой таких математических библиотек. В иностранной литературе эта проблема освещена хорошо, вот я и решил в научно-популярной форме изложить её на русском языке, опираясь на западные источники и пока ещё небольшой личный опыт.
Total votes 53: ↑53 and ↓0+53
Comments83

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity