Obliczenie funkcji zmiennoprzecinkowej na uint zamiast double c#

Cześć,
//przedmiowa
liczba musi być z przedziału [-2;2] nazwijmy ją x. x jest z dokladnoscia 10 ^ -9. Mam więc zbior 4 000 000 000 potencjalnych liczb. mogę zapisać interpretację każdego x jako liczbę uint.
//pytanie
czy da sie obliczyc funkcje f(x)=x*sin(x)*sin(10x) nie konwertujac zmiennej na typ zmiennoprzecinkowy?
Jeżeli tak to proszę o jakąś wskazówkę, żebym mógł poszukać w internecie rozwiązania mojego problemu :slight_smile:

no ale pi to wartosc zmienoprzecinkowa, funkcja sinus potrzebuje wlasnie takiej. zastanawiam sie czy da sie to zrobic tylko na calkowitych

Powiem tak nie wiem :slight_smile:
bo rozumiem, że nie chodzi tobie o taki dziwoląg gdzie X to uint i do obliczeń masz

Convert.ToDouble(X)/1000000000

Ale na zdrowy rozsądek pewnie musiałbyś jeżeli się da napisać funkcje sin od zera tak aby działała tylko na wartościach całkowitych (w sensie np. że 1 000 000 interpretowałaby jako 1)

ale tracisz precyzję i możesz mieć błędy w obliczeniach - zależnie jak potem używasz wyniku i do czego

Da się,ale tracisz precyzję.uint oznacza Unsigned int.Całkowite bez znaku.Będzie ci obcinać ułamek,zaokrąglać.

Może ta biblioteczka rozwiąże problem? https://github.com/nathanpjones/DecimalMath
Działania wykonujesz na typie decimal który ma wymaganą przez Ciebie dokładność.
Obliczenia pod spodem są wykonywane przez wykorzystanie szeregu Taylora, jeśli dobrze widzę: https://github.com/nathanpjones/DecimalMath/blob/master/DecimalEx/DecimalExTrig.cs

Albo tablicę Sinusów,cosinusów pozaokrąglaną.Mnożysz coś przez 1000,a potem dzielisz przez 256.Dostajesz liczbę całkowitą z ułamkiem i ten ułamek obcinasz.Taka symulacja sinusów,cosinusów na liczbach całkowitych.

4 mld double’i to 64GB miejsca. Do ram tego nie zaladujesz, trzeba byłoby na dysku trzymać.