eXma » Diskutieren » Computer und Technik
Startseite - Veranstaltungen - Mitglieder - Suche
Vollständige Version anzeigen: C++ Problem
marco
hallo leute,

ich programmier zur zeit n bissl für meine diplomarbeit und arbeite da mit c++ und c-xsc als
zusatzlibrary...

nun hab ich ein wert N vom typ real und brauch den aber als int (variablenname anz)...
im prinzip is das auch ne ganze zahl... abgesehen davon kann der von mir aus auch alles hinterm
komma abschneiden
nur meckert der immer

bei anz = N;
da kommt error: cannot convert ‘cxsc::real’ to ‘int’ in assignment

und bei anz = int(N);
komt: error: invalid cast from type ‘cxsc::real’ to type ‘int’

hat jemand ne idee, was ich machen kann???

ach ja, die zahl N entsteht durch nen Bruch... im Zähler wird ein komplexes integral gebildet, das als
wert ein vielfaches von 2pi hat und im Nenner steht dann halt 2pi... also kommt ne ganze zahl raus...

danke...
Crunch Head
Kenne zwar die Bibliothek ned, aber deren Doku sagt:

double _double (const real &a) throw ()
Typecast to convert a real value into a double value.

Und das Double sollteste dann in int casten können.
Das PRoblem ist, dass real eine Klasse der Bibliothek ist, die kannste ni einfach in nen Standarttyp casten, wenn die das ni unterstützt. smile.gif Also Funktionen der Klasse nutzen.
marco
Zitat(Crunch Head @ 15 Feb 2008, 15:48)
Kenne zwar die Bibliothek ned, aber deren Doku sagt:

double  _double (const real &a) throw ()
  Typecast to convert a real value into a double value.

Und das Double sollteste dann in int casten können.
Das PRoblem ist, dass real eine Klasse der Bibliothek ist, die kannste ni einfach in nen Standarttyp casten,
wenn die das ni unterstützt. smile.gif Also Funktionen der Klasse nutzen.
*

scheint zu klappen...

danke...
Chris
wow ... was macht man denn dann mit dem reellen Rest von real? Wäre die gute Lösung nicht real zu runden und dann in int zu schreiben?

\edit: seh gerade, dass es gar keinen reellen Rest gibt. Mathematik ist doch was tolles ..
Keinstein
Die Typischen Realzahlen sind blöd zu managen. Wenn Du kleine Rundungsfehler hast, kann aus 1000 gut mal 999,99998irgendwas werden. Nach int umwandeln -> 999 = Fehler.

Mit Runden bist Du auf der sicheren Seite. Kann sein, dass er in dieser Klasse Pi ausklammern und dann rational bzw. ganzzahlig rechnen kann. Dann kannst Du getrost direkt umwandeln. Generell hilft dir vielleicht ein eigener Operator (ungetestet, aus anderen Antworten gebaut):

CODE

inline operator int (cxsc::real r) {
  return int(double(r));
}
mmarx
Casten ist da dann aber trotzdem recht uncool, das runded ja immer nach unten ab (und kann auch mal ganz locker schiefgehen, wenn int standardmaessig unsigned ist).

boost::numeric_cast nehmen und gut ist.
stth
kann man den rundungsmodus nicht umstellen?
marco
Zitat(Keinstein @ 15 Feb 2008, 16:38)
Die Typischen Realzahlen sind blöd zu managen. Wenn Du kleine Rundungsfehler hast, kann aus 1000 gut
mal 999,99998irgendwas werden. Nach int umwandeln -> 999 = Fehler.

*


dieses problem läßt sich aber leicht umgehen, indem man auf die zahl 0,5 draufrechnet... so wird durch
abschneiden korrekt gerundet...
mmarx
Wenn die Zahl gross genug ist, hilft auch +.5d da nichts mehr, dann aendert sich naemlich dank Ausloeschung nichts und es wird wieder falsch gerundet.