Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Funkcja modf - źle działające liczby 1.001 i 2.002

Ostatnio zmodyfikowano 2014-01-14 13:54
Autor Wiadomość
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:
C/C++
#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?
P-101164
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.
P-102144
« 1 »
  Strona 1 z 1