Dzielenie modulo liczb zmiennoprzecinkowych
Dzielenie modulo liczb zmiennoprzecinkowych
Potrzebuje zrealizować dzielenie modulo liczb zmiennoprzecinkowych, ale Labview oblicza poprawne wyniki tylko dla liczb całkowitych. Może macie jakiś pomysł jak to zrealizować ?
Re: Dzielenie modulo liczb zmiennoprzecinkowych
To pytanie jest podchwytliwe, czy rzeczywiście funkcja Quotient & Remainder działa u Ciebie niepoprawnie?
Dzielenie modulo liczb zmiennoprzecinkowych
Pytanie nie jest podchwytliwe. Dziele modulo % w formula node i np. dla 2,6%0,1=0,1. Jakiś pomysł ?
Re: Dzielenie modulo liczb zmiennoprzecinkowych
Faktycznie
No to nie pozostaje Ci nic innego jak dołożyć do Formula Node warunek sprawdzający:
result=x%y;
if(result == y) result =0;
Aczkolwiek wyniki dla ujemnych y wyglądają również podejrzanie (czyli są złe
)
A nie możesz zastosować Quotient & Remainder? Wygląda pewniej

result=x%y;
if(result == y) result =0;
Aczkolwiek wyniki dla ujemnych y wyglądają również podejrzanie (czyli są złe

A nie możesz zastosować Quotient & Remainder? Wygląda pewniej

Dzielenie modulo liczb zmiennoprzecinkowych
W dodatku działa również na typie DBL.
Proponuje też zaglądnąć do pomocy kontekstowej dla Quotient & Remainder (Ctrl+H i przeczytać szczegółowy opis)
Proponuje też zaglądnąć do pomocy kontekstowej dla Quotient & Remainder (Ctrl+H i przeczytać szczegółowy opis)
Dzielenie modulo liczb zmiennoprzecinkowych
Też próbowałem z tym Quotient & Remainder ale ten sam wynik. Też nie wiem dlaczego ale wyniki są czasem poprawne (wynik=0) a czasem bliskie zeru np. 2,323E -17 gdy teoretycznie ma wyjść zero. Macie jakieś pomysły jak zrealizować dzielenie modulo ręcznie ? Jakiś kod może ?
Re: Dzielenie modulo liczb zmiennoprzecinkowych
Sprawdź to:
float32 a;
a=x/y;
if (a>= 0) result=x-intrz(a)*y;
else result=x+ceil(abs(a))*y;
float32 a;
a=x/y;
if (a>= 0) result=x-intrz(a)*y;
else result=x+ceil(abs(a))*y;
-
- Posty: 641
- Rejestracja: 31 gru 2010 01:36
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Katowice
Re: Dzielenie modulo liczb zmiennoprzecinkowych
To jest w praktyce zero. Zobacz sobie stałą Machine Epsilon w palecie Numeric (zobacz co u Ciebie zwraca). Liczby zmiennoprzecinkowe mają to do siebie, że rzadko wyniki działań na nich wynoszą dokładnie 0, szczególnie przy tak złożonych operacjach jak dzielenie modulo.bloob pisze:Też próbowałem z tym Quotient & Remainder ale ten sam wynik. Też nie wiem dlaczego ale wyniki są czasem poprawne (wynik=0) a czasem bliskie zeru np. 2,323E -17 gdy teoretycznie ma wyjść zero. Macie jakieś pomysły jak zrealizować dzielenie modulo ręcznie ? Jakiś kod może ?
Dzielenie modulo liczb zmiennoprzecinkowych
Dzięki Góras. Działa 
