Strona 1 z 1

Dzielenie modulo liczb zmiennoprzecinkowych

: 06 sty 2013 14:41
autor: bloob
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

: 06 sty 2013 15:04
autor: Góras
To pytanie jest podchwytliwe, czy rzeczywiście funkcja Quotient & Remainder działa u Ciebie niepoprawnie?

Dzielenie modulo liczb zmiennoprzecinkowych

: 06 sty 2013 15:47
autor: bloob
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

: 06 sty 2013 16:21
autor: Góras
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 :)

Dzielenie modulo liczb zmiennoprzecinkowych

: 06 sty 2013 16:23
autor: Mikrobi
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)

Dzielenie modulo liczb zmiennoprzecinkowych

: 06 sty 2013 16:38
autor: bloob
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

: 06 sty 2013 17:23
autor: Góras
Sprawdź to:

float32 a;
a=x/y;
if (a>= 0) result=x-intrz(a)*y;
else result=x+ceil(abs(a))*y;

Re: Dzielenie modulo liczb zmiennoprzecinkowych

: 06 sty 2013 17:30
autor: PiDi
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 ?
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.

Dzielenie modulo liczb zmiennoprzecinkowych

: 07 sty 2013 08:41
autor: bloob
Dzięki Góras. Działa :D