porownanie double

  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
 
#include <iostream>

int main() {

   double a = 123.0;                                                            
   double b = 123;
   if (a != b) {
      std::cout << " roznice\n";
   }
   else {
      std::cout << "brak roznic\n";
   }
   return 0;
}

czy ten kod gwarantuje poprawne porownanie ?

kaczus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Łódź
  • Postów: 1403
2

Ten wyjątkowo zadziała wg oczekiwań. Natomiast operacje mogą zmienić wynik, co opisałem jakis czas temu w artykule: http://kaczus.ppa.pl/art/liczbyzmiennoprzecinkowe,19.html

TK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 342
0

Nie chce mi sie czytac calego artykulu, ktory napsiał @kaczus ale lepiej jest porownywac typy zmiennoprzecinkowe w nastepujacy sposob:

Kopiuj
   if (fabs(a - b) <= 1e-5) {
      std::cout << "brak roznic\n";
   }
   else {
      std::cout << " roznice\n";
   }

Liczba 5 to przyjeta przeze mnie dokladnosc (0.00001) z jaka maja byc porownywane obie zmienne i moze byc zmieniona w zaleznosci od tego jakiej precyzji porownania potrzebujesz.

P2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 12
0

Tutaj jest cała dyskusja na ten temat:

http://stackoverflow.com/questions/17333/most-effective-way-for-float-and-double-comparison

wniosek: wiele zależy od kontekstu aplikacji, ale to Twoje zadziała.

  • Rejestracja: dni
  • Ostatnio: dni
0

dzieki za popmoc ;)

MO
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tam gdzie jest (centy)metro...
3

Chociaż podziękowałeś za pomoc, dodam jeszcze że:
Informację na temat wartości EPISOLON możesz wyciągnąć w C++ włączając <limits> z klasy numeric_limits i metody epsilon().
Informację na temat wartości EPISOLON dla C możesz wyciągnąć używając <float.h> i zdefiniowanych stałych DBL_EPSILON, FLT_EPSILON,...
Dobre opracowanie i klasyczną pozycję (oprócz kolegi @kaczus) masz tu: http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
Tu masz standard IEE-754: ftp://ftp.openwatcom.org/pub/devel/docs/ieee-754.pdf
A tu masz historię jak się rodził "zmienny przecinek" (moim zdaniem ciekawe): https://www.cs.berkeley.edu/~wkahan/ieee754status/754story.html

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.