Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » Typmist: Compiler optimiert scheinbar zu viel

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
20.10.2004, 15:15 Uhr
Frank71



Hallo,

ich habe folgendes:

<schnipp>
a = HardwareControl->PixelpLine; // 5184
b = PaintBox1->Width; // 689
m_stepSize = a/b;
<schnapp>

m_stepSize bleibt hier ganzzahlig , obowhl a/b dies nicht ist und m_stepSize auf als double deklariert wurde.
Zudem läßt sich die Zeile kein breakpoint zu - sie wird irgendwie wegopimiert


Dieser Fehler setzt sich entsprechend in einer anderen Funktion fort. Wie kriege ich Borland dazu, diese Konvertierung bzw. abrunden sein zu lassen
(die Compileroption - CodeOptimierung habe ich bereits deaktiviert)
<schnipp>
int x_b;
int y_b;
int x_scan = 0;
double x_scandbl = 0;

for (i=0;i<PaintBox1->Width;i++) // 5150
{

x_scandbl = x_scandbl+this->m_stepSize;
x_scan = floor(x_scandbl);
y_b = Bottom-vect[x_scan];
if (CheckBox1->Checked == true)
PaintBox1->Canvas->Pixels[x_b][y_b]=color;

}

<schnapp>


Vielen Dank
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.10.2004, 19:50 Uhr
Hans
Library Walker
(Operator)



Zitat von Frank71:
Hallo,

ich habe folgendes:

<schnipp>
a = HardwareControl->PixelpLine; // 5184
b = PaintBox1->Width; // 689
m_stepSize = a/b;
<schnapp>

m_stepSize bleibt hier ganzzahlig , obowhl a/b dies nicht ist und m_stepSize auf als double deklariert wurde.
Zudem läßt sich die Zeile kein breakpoint zu - sie wird irgendwie wegopimiert


Was kriegst Du denn für ein Ergebniss geliefert? - Der Windoof-Taschenrechner liefert bei mir 7.523usw.
Möglicherweise führt er die Rechnung auch ganzzahlg durch, und castet erst das Ergebniss nach double. Versuch es mal mit einem erzwungenen cast, etwa so:
m_stepSize = (double)a/(double)b;
Damit wird der compiler veranlasst, die Zahlen erst in double umzuwandeln, und danach erst die Rechnung zu machen.


Zitat:
Dieser Fehler setzt sich entsprechend in einer anderen Funktion fort. Wie kriege ich Borland dazu, diese Konvertierung bzw. abrunden sein zu lassen
(die Compileroption - CodeOptimierung habe ich bereits deaktiviert)

Welche denn? - Diese hier?

Code:
-Od    Disable all optimizations

Vielleicht hilft es ja auch, Wenn Du mit diesen Optionen etwas herum bastelst, bzw. Experimentierst.

Code:
Compiler options | Floating point

-f-    No floating point
-f     Emulate floating point
-ff    Fast floating point
-fp    Correct Pentium fdiv flaw



Das sind die Optionen, wie sie dem compiler auf der Kommandozeile übergeben werden können; - wo man die in der IDE einstellt, weis ich gerad nicht.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 20.10.2004 um 19:53 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.10.2004, 09:57 Uhr
Frank71




Zitat von Frank71:

Hallo,

ich habe folgendes:

<schnipp>
a = HardwareControl->PixelpLine; // 5184
b = PaintBox1->Width; // 689
m_stepSize = a/b;
<schnapp>


m_stepSize bleibt hier ganzzahlig , obowhl a/b dies nicht ist und m_stepSize auf als double deklariert wurde.
Zudem läßt sich die Zeile kein breakpoint zu - sie wird irgendwie wegopimiert


[quote Hans]
Was kriegst Du denn für ein Ergebniss geliefert? - Der Windoof-Taschenrechner liefert bei mir 7.523usw.
Möglicherweise führt er die Rechnung auch ganzzahlg durch, und castet erst das Ergebniss nach double. Versuch es mal mit einem erzwungenen cast, etwa so:
m_stepSize = (double)a/(double)b;
Damit wird der compiler veranlasst, die Zahlen erst in double umzuwandeln, und danach erst die Rechnung zu machen.
[/quote ]

das habe ich schon ausprobiert - aber ich konnte den Fehler (und auch den meines vorangegangenen threads inzwischen beheben)
Auf den Zusammenhang kommt man jedoch nicht ohne weiteres:

Ich hatte bei einigen Funktionen einfach ein return vergessen. Sie wurden vorher aufgerufen - laufen aber scheinbar problemlos. Dies führt zu diesem (scheinbar) unerklärlichen Verhalten im Bereich der double-Zahlen.
Darauf gekommen bin ich letztlich in dem ich die obigen Zeilen an andere Stelle aufgerufen habe und sie dann auch das machten was ich erwartet habe.
Trozdem vielen Dank

und viele Gruesse

Frank

P.S.:Mit Projekt->Optionen->Compiler kann man übrigens die Optimierungsoptionen einstellen.

Dieser Post wurde am 21.10.2004 um 10:02 Uhr von Frank71 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Borland C++ Builder ]  


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: