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

Problem z double (niedokładny wynik)

Ostatnio zmodyfikowano 2009-06-11 12:10
Autor Wiadomość
DejaVu
» 2009-06-11 12:41:56
b= 5
a= 0
Pole= 0
Operacja pierwsza.....
b= 5
sqrt(2)= 1.41421
a= 3.53553
Druga operacja...
a= 12.5
Pole= 0
Pole tego trójkąta wynosi: 12.5
Gdzie jest tutaj jakiś 'błąd'?
P-7585
programator
Temat założony przez niniejszego użytkownika
» 2009-06-11 12:52:57
Druga operacja to:
a = pow( a, 2 );
czyli:
a = 3.53553 * 3.53553;
powinno być:
a = 12.4999723809
a jest:
a = 12.5
A ja nie chcę tego zaokrąglenia.....
P-7586
DejaVu
» 2009-06-11 12:54:58
To że wypisujesz, że sqrt(2)=1.41421 wcale nie oznacza, że liczba w pamięci ma taką reprezentację - ma ona dużo więcej miejsc po przecinku. Musisz ją uciąć, żeby uzyskać pseudo 'prawidłowy' wynik.

C/C++
#include<iostream>
#include <iomanip>
#include <cmath>
long double poPrzecinku( long double liczba, long poPrzecinku )
{
    long long iLiczba = 10;
    iLiczba = static_cast < long long >( pow( iLiczba, poPrzecinku ) );
   
    return round( liczba * iLiczba ) / iLiczba;
}

using namespace std;
int main()
{
    double a = 0, b = 5, Pole = 0;
    cout << "b= " << b << endl;
    cout << "a= " << a << endl;
    cout << "Pole= " << Pole << endl;
    cout << "Operacja pierwsza.....\n";
    a = b / sqrt( 2 );
    a = poPrzecinku( a, 5 );
    cout << "b= " << b << endl;
    cout << "sqrt(2)= " << sqrt( 2 ) << endl;
    cout << "a= " << a << endl;
    cout << "Druga operacja...\n";
    a = pow( a, 2 );
    cout << "a= " << a << endl;
    cout << "Pole= " << Pole << endl;
    cout << "Pole tego tr˘jkĄta wynosi: " << setprecision( 8 ) << a;
    system( "pause>>NULL" );
    return( 0 );
}
P-7587
programator
Temat założony przez niniejszego użytkownika
» 2009-06-11 12:58:28
Dzięki wielkie, muszę tylko rozgryźć ten kodzik, jak to działa:)
Temat do zamknięcia:)
P-7588
manfred
» 2009-06-11 12:10:32
Jeśli nie widzisz, to to jest zaokrąglone do piątego miejsca po przecinku.
Ta niedokładność wynika ze sposobu, w jaki są liczby zmiennoprzecinkowe zapisane w komputerze - określa to jakaś tam norma IEEE :>.
P-18964
1 « 2 »
Poprzednia strona Strona 2 z 2