Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Bug im g++?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.01.2006, 16:35 Uhr
predator



Hallo!

Mir ist gerade etwas merkwürdiges aufgefallen; folgender Code:

C++:
#include <iostream>

double round(double zahl, int stellen)
{
    int fac=1;
    for(int i=0;i<stellen;i++)
        fac*=10;
    
    return static_cast<int>(zahl*fac+0.5)/static_cast<double>(fac);
}

int main()
{
    double a; int b;
    std::cin>>a>>b;
    std::cout << round(a,b);

    return 0;
}


Mit dem Visual C++ 2005 Express Compiler gibt es keine Probleme, aber als ich es zufälligerweise mit Code::Blocks probiert hab, ist mir ein Fehler aufgefallen, den ich auch unter Linux mit g++(3.3.5) beobachten kann:

Code:
Eingabe:
    2.35 und 1
Ausgabe mit Visual C++ 2005 Express:
    2.4
Ausgabe mit g++:
    2.3


Hat jemand eine Idee woran das liegen könnte?
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.

Dieser Post wurde am 16.01.2006 um 16:36 Uhr von predator editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.01.2006, 16:40 Uhr
Pler
Einer von Vielen
(Operator)


Also bei meinem g++ kommt 2.4 raus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.01.2006, 16:59 Uhr
predator



mmh, könntest du es mal mit 11.35 und 1 probieren?
Falls 11.4 rauskommt, könntest du mir sagen, wie du den Compiler aufrufst? Hab vom g++ nicht gerade viel Ahnung...
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.01.2006, 17:07 Uhr
Pler
Einer von Vielen
(Operator)



Bash:

$ ./mytest
2.35
1
2.4




Bash:

$ ./mytest
11.35
1
11.3


Hm. Schon komisch.

Aufruf:

Bash:

$ make mytest
g++     mytest.cpp   -o mytest

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.01.2006, 17:32 Uhr
(un)wissender
Niveauwart


Das kann an 80 bzw 64 Bit Genauigkeit liegen.
Hau mal zu deinen 0.5 aus limits das epsilon dazu. Sollte dann erledigt sein.


Bearbeitung:

Die Schleife würde ich durch pow ersetzen .


--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 16.01.2006 um 17:33 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.01.2006, 17:50 Uhr
~DoppleR
Gast


Das ist wahrscheinlich ein Problem mit dem Runden von doubles (2.35+.5 ist in double wahrscheinlich etwas kleiner als 2.4). Das ist aber kein Bug:
http://gcc.gnu.org/bugs.html#nonbugs
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
16.01.2006, 18:02 Uhr
predator




Zitat von (un)wissender:
Das kann an 80 bzw 64 Bit Genauigkeit liegen.
Hau mal zu deinen 0.5 aus limits das epsilon dazu. Sollte dann erledigt sein.

Danke, es klappt!


Zitat von (un)wissender:
Die Schleife würde ich durch pow ersetzen .

Dürfen wir nicht.
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: