Funkcja modf - źle działające liczby 1.001 i 2.002
Ostatnio zmodyfikowano 2014-01-14 13:54
tomtom Temat założony przez niniejszego użytkownika |
Funkcja modf - źle działające liczby 1.001 i 2.002 » 2014-01-04 20:11:08 Napisałem program mający liczyć ilość cyfr po przecinku: #include <iostream> #include <iomanip> #include <cmath> using namespace std;
int main()
{ double i = 0, precision, liczba, czescUlamkowa, czescCalkowita; cout << "precision="; cin >> precision; while( czescUlamkowa != 0 ) { liczba = precision * pow( 10, i ); czescUlamkowa = modf( liczba, & czescCalkowita ); i++; } cout << "Precyzja: " <<( i - 1 ) << " cyfr po przecinku." << endl; system( "pause" ); return 0; }
Działa OK poza liczbami 1.001 i 2.002 kiedy to głupieje. Nie wiem dlaczego tylko przy tych liczbach (innych nie udało mi się znaleźć). Czy ktoś wie gdzie jest błąd? |
|
DejaVu |
» 2014-01-14 13:54:29 Liczby zmiennnoprzecinkowe nie są reprezentowane w systemie dziesiętnym więc to, że napiszesz w programie '1.001' nie oznacza wcale, że w pamięci zostanie zapisana taka wartość. Może się okazać, że liczba w pamięci będzie miała w wartość 1.000999993847. |
|
« 1 » |