Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Кто сказал, что значения tsx должны быть равны точно коэффициентам ряда Тейлора. Напрашивается достаточно очевидная идея проварьировать значения коэффициентов, чтобы улучшить точность аппроксимации и убрать постоянную составляющую ошибки. Грамотно сделать такую вариацию достаточно сложно.А если воспользоваться математическим пакетом — то очень даже просто, потому что там обычно присутствует инструментал для аппроксимации. В WM, в частности, есть функция FindFit, которой можно аппроксимировать что угодно чем угодно (в том числе и рациональным полиномом, который для многих функций даёт большую точность).
Мне кажется, вы спутали МНК и градиентный спускМне так не кажется, потому что я и не утверждал, что они дают идентичный результат.
коэффициенты- де-факто целочисленные, и потому к ним градиентный спуск не применим (градиента для целых чисел нету)Так коэффициенты можно округлять уже после, а ещё лучше — рационализировать. Понятно, что таким образом (равно как и МНК) наилучшего результата не получить — но в качестве первичной аппроксимации сойти вполне может, и результат таки может оказаться лучше Тейлора.
но это в 10 раз медленнее чем double*double.
если в сложении-вычитании double можно производить вычисления большей точности за счет double.double, то с умножением такой фокус не проходит?Проходит, есть алгоритмы для умножения и double на double, и double-double на double-double. Тут в архиве qd-2.3.22.tar.gz есть и описание в pdf, и реализация на си и фортране.
...
s = x + (dx + x * xx * (sn3 + xx * sn5)); // здесь
c = x * dx + xx * (cs2 + xx * (cs4 + xx * cs6)); // и здесь
SINCOS_TABLE_LOOKUP (u, sn, ssn, cs, ccs);
...
Друзья, не подскажете какой лучше алгоритм выбрать для вычисления синуса с точностью до 200-300 бит (размер мантиссы). Входной аргумент: 0 <=x <1 в радианах. Может есть хорошие библиотеки по работе с вещественными числами настраиваемой точности (типа, хочешь 200 бит мантиссы - на тебе)? За совет буду благодарен. Или тут можно отделаться арифметикой с фиксированной запятой и работать с рациональным представлением чисел?
Если использовать ряд Тейлора, то не будет ли оптимальнее (для заявленной точности) вычислять sin(x/2) и cos(x/2)? Эти ряды, по идее, будут сходиться быстрее...
Точные и быстрые вычисления для чисел с плавающей точкой на примере функции синуса. Часть 3: fixed-point