Dzielenie modulo liczb zmiennoprzecinkowych

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
bloob
Posty: 10
Rejestracja: 23 gru 2012 15:57
Wersja środowiska: LabVIEW 2010

Dzielenie modulo liczb zmiennoprzecinkowych

Post 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ć ?
Awatar użytkownika
Góras
Posty: 88
Rejestracja: 13 sie 2012 10:15
Wersja środowiska: LabVIEW 2012

Re: Dzielenie modulo liczb zmiennoprzecinkowych

Post autor: Góras »

To pytanie jest podchwytliwe, czy rzeczywiście funkcja Quotient & Remainder działa u Ciebie niepoprawnie?
bloob
Posty: 10
Rejestracja: 23 gru 2012 15:57
Wersja środowiska: LabVIEW 2010

Dzielenie modulo liczb zmiennoprzecinkowych

Post autor: bloob »

Pytanie nie jest podchwytliwe. Dziele modulo % w formula node i np. dla 2,6%0,1=0,1. Jakiś pomysł ?
Awatar użytkownika
Góras
Posty: 88
Rejestracja: 13 sie 2012 10:15
Wersja środowiska: LabVIEW 2012

Re: Dzielenie modulo liczb zmiennoprzecinkowych

Post 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 :)
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Dzielenie modulo liczb zmiennoprzecinkowych

Post 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)
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
bloob
Posty: 10
Rejestracja: 23 gru 2012 15:57
Wersja środowiska: LabVIEW 2010

Dzielenie modulo liczb zmiennoprzecinkowych

Post 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 ?
Awatar użytkownika
Góras
Posty: 88
Rejestracja: 13 sie 2012 10:15
Wersja środowiska: LabVIEW 2012

Re: Dzielenie modulo liczb zmiennoprzecinkowych

Post 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;
PiDi
Posty: 641
Rejestracja: 31 gru 2010 01:36
Wersja środowiska: LabVIEW 2017
Lokalizacja: Katowice

Re: Dzielenie modulo liczb zmiennoprzecinkowych

Post 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.
ObrazekObrazekObrazekObrazek
bloob
Posty: 10
Rejestracja: 23 gru 2012 15:57
Wersja środowiska: LabVIEW 2010

Dzielenie modulo liczb zmiennoprzecinkowych

Post autor: bloob »

Dzięki Góras. Działa :D
ODPOWIEDZ