adnega 11 19 июля, 2021 Опубликовано 19 июля, 2021 · Жалоба Как я понял что сделал jcxz: - полином 6 степени неплохо аппроксимирует четвертинку синуса; - значения для отрицательного аргумента равны значениям как у положительного, но со знаком минус, поэтому сразу избавляемся от знака; - оставшийся горбик симметричен, если аргумент находится во второй половине горбика, то симметрично пересчитываем его в первую половину; - после этих манипуляций получаем аргумент в четвертинке - считаем полином 6 степени с учетом насыщения; - учитываем знак аргумента, возвращаем результат. у меня получилась такая максимальная погрешность = -0.000000514, типа 20 разрядов честные. зеленый - четверть синусоиды, красный - аппроксимация полиномом 6-й степени на этом участке. Полином чуть-чуть отличается: -0.9245958*x^6+3.146588*x^5-0.1971828*x^4-5.1333584*x^3-0.0029408*x^2+3.1416923*x-(6.462529*10^(-7)). Для получения коэффициентов домножить на 2^28. Кста, нулевой коэффициент тоже не равен нулю, но это, видимо, метод наименьших квадратов сделал минимальную ошибку для всего диапазона. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 217 19 июля, 2021 Опубликовано 19 июля, 2021 · Жалоба 17.07.2021 в 19:02, Arlleex сказал: Т.е. не на злом языке математики, а на простом человеческом с немудреными формулами Я уже не помню где взял этот полином и как он называется. За давностью лет. Пользуюсь им с ~2005г или больше. В разных проектах. 17.07.2021 в 20:16, adnega сказал: причем A0 != 0 поэтому sin(0) будет != 0. Что!? Ну и что что A0 !=0 ? Из этого совсем не следует sin(0)!=0. Элементарно же проверить - весь код я привёл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 217 19 июля, 2021 Опубликовано 19 июля, 2021 · Жалоба 1 час назад, adnega сказал: - значения для отрицательного аргумента равны значениям как у положительного, но со знаком минус, поэтому сразу избавляемся от знака; - оставшийся горбик симметричен, если аргумент находится во второй половине горбика, то симметрично пересчитываем его в первую половину; - после этих манипуляций получаем аргумент в четвертинке - считаем полином 6 степени с учетом насыщения; - учитываем знак аргумента, возвращаем результат. у меня получилась такая максимальная погрешность = -0.000000514, типа 20 разрядов честные. Да, это так. По коду функции видно, что расчёт делается для четверти периода + учитываются знаки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 19 июля, 2021 Опубликовано 19 июля, 2021 · Жалоба 19 минут назад, jcxz сказал: Я уже не помню где взял этот полином и как он называется. За давностью лет. Пользуюсь им с ~2005г или больше. В разных проектах. Он весьма хорош. Не проверял, но если он ошибку не тупо по квадрату считает, а учитывает значение функции, то это практически идеал. Но если из 32 разрядов 20 для задачи достаточно, то можно ничего не пересчитывать. 19 минут назад, jcxz сказал: Ну и что что A0 !=0 ? Из этого совсем не следует sin(0)!=0. Элементарно же проверить - весь код я привёл. Позже отписал: там стоит беззнаковый учет насыщения, поэтому маленький отрицательный "не ноль" становится нулем. Кста, насчет A0 - оно получилось 8 битное - это тоже используется. Еще я попробовал полином 4 степени - только 3 знака после запятой получается - выигрыш мал, о потери в три разряда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 217 19 июля, 2021 Опубликовано 19 июля, 2021 · Жалоба 8 минут назад, adnega сказал: Еще я попробовал полином 4 степени - только 3 знака после запятой получается - выигрыш мал, о потери в три разряда. В некоторых проектах использовал и такой. Там где скорость была важнее точности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 19 июля, 2021 Опубликовано 19 июля, 2021 · Жалоба 8 hours ago, Arlleex said: который на очень простых аналогиях и "на пальцах" разжевывал весьма сложные вещи Весьма ценный навык. Обычно он говорит о глубоком владении предметом. Но обычно это раздражает и больно задевает тех, кто мало что понимает, и использует очень сложные формулы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться