Funkcje trygonometryczne

0

Posiadam tablicę funkcji trygonometrycznych dla wszystkich kątów opisanych liczbą naturalną w skali od 0 do 90. Jak wyliczyć np. funkcję sinus z 35.673 stopni?

Wpadłem na mniej-więcej taki pseudokod:

float kąt = 35.673;
float sinA = 0.5736; //dla kąta 35
float sinB = 0.5878; //dla kąta 36
float sinC = sinA + ((sinB - sinA) * (kąt % 1)); //dla kąta 35.673

Czyli:

  1. Pobieram wartość funkcji sinus dla najbliższych całkowitych funkcji kąta
  2. Wyliczam różnicę między funkcjami
  3. Mnożę przez część dziesiętną kąta
  4. Wynik dodaję do sinusa mniejszego kąta

Moje pytania:

  • Czy podany przeze mnie algorytm jest poprawny
  • Czy całość da się jakoś skrócić?
0

Jak wyliczyć np. funkcję sinus z 35.673 stopni?

Math.Sin(35.673), ale zapewne nie o to Ci chodzi ;]


Czy podany przeze mnie algorytm jest poprawny

Nie istnieje modulo z liczb(y) zmiennoprzecinkowej(/-ych). istnieje, mea culpa.

0

Jeżeli zależy Ci bardziej na czasie, niż dokładności obliczeń, mógłbyś spróbować z funkcją wielomianową, która dla przedziału <0,1> daje to co sin<0, PI>. Trzeba by było po przeliczać trochę argumenty, uwzględnić kąty z innych ćwiartek, ale prawdopodobnie można by było obliczać przybliżone wartości szybciej niż zwykłym sin z cmath.

user image
user image

Ponoć dokładność jest obarczona błędem 0.1%.

Twój sposób jest porządku do szacowania wartości(jeżeli %1 oznacza wydobycie części ułamkowej z liczby), ale mniej na uwadze że są to wartości mocno przybliżone, zwłaszcza, że dokładność twoich danych to 3-4 miejsca po przecinku.

0

@ShookTea, algorytm jest kiepski.
@Patryk27

Nie istnieje modulo z liczb(y) zmiennoprzecinkowej(/-ych).
W Javie istnieje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1