...да ещё UASM делает не правильный вроде как код. Если так сделать, то UASM ожидает с точкой число, и сделает ноль. vec2d@BitSign __m128d { 8000000000000000h, 8000000000000000h } ;// бит знака double А так уже правильно. vec2d@BitSign __m128q { 8000000000000000h, 8000000000000000h } ;// бит знака double А то у меня не так код работал, пока не разобрался в этой мелочи. alex_dz, тогда fsin, там как раз внутренняя точность long double ака real10. Так же максимальная точность на -Pi*2..Pi*2 достигает 9 итераций, это для синуса. И погрешность средняя 5.247e-16, а максимальная 1.53e-15, что для double хорошо. Тангенс пока не делал, надо таблицу доделать.
Intro, 8 знаков это точность zxspectrum: Код (Text): sin 10 -0.54402111 -0.54402111088937 sin 20 +0.91294525 +0.91294525072763 Там для вычислений всей математики использовался один алгоритм - генератор полиномов Чебышева(с разными коэффициентами), именно потому, что сходимость у тейлора плохая. Сами понимаете 8бит/2MHz.. я как то искал где коэффициенты взять для более точного вычисления, так и не нашёл. ps: Код (Text): An alternative subroutine for SIN X: It is straightforward to produce the full expansion of the Chebyshev polynomials and this can be written in BASIC as follows: 550 LET T =(32*Z*Z*Z*Z*Z-40*Z*Z*Z+10*Z)*A(1) +(16*Z*Z*Z*Z-16*Z*Z+2)*A(2) +(8*Z*Z*Z-6*Z)*A(3) +(4*Z*Z-2)*A(4) +2*Z *A(5) +A(6) 560 RETURN This subroutine is called instead of the SERIES GENERATOR and can be seen to be of a similar accuracy. An alternative subroutine for EXP X: The full expansion for EXP X is: 550 LET T =(128*Z*Z*Z*Z*Z*Z*Z-224*Z*Z*Z*Z*Z+112*Z*Z*Z-14*Z)*A(1) +(64*Z*Z*Z*Z*Z*Z-96*Z*Z*Z*Z+36*Z*Z-2)*A(2) +(32*Z*Z*Z*Z*Z-40*Z*Z*Z+10*Z)*A(3) +(16*Z*Z*Z*Z-16*Z*Z+2)*A(4) +(8*Z*Z*Z-6*Z)*A(5) +(4*Z*Z-2)*A(6) +2*Z*A(7) +A(8) 560 RETURN --- Сообщение объединено, 13 апр 2025 в 00:58 --- Вот нашёл как коэфф получаются: