_
toggle menu eXmatrikulationsamt.de
online: benniS und 352 gäste

C++ Problem

real zu int casten
Themen Layout: [Standard] · Linear · Outline Thema abonnieren | Thema versenden | Thema drucken
post 15 Feb 2008, 16:40
avatar
4. Schein
****

Punkte: 470
seit: 01.10.2003

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...
ProfilPM
AntwortenZitierenTOP
post 15 Feb 2008, 16:48

1. Schein
*

Punkte: 30
seit: 11.10.2005

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.
ProfilPM
AntwortenZitierenTOP
post 15 Feb 2008, 16:54
avatar
4. Schein
****

Punkte: 470
seit: 01.10.2003

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...
ProfilPM
AntwortenZitierenTOP
post 15 Feb 2008, 16:59
avatar
Straight Esh
*********

Punkte: 14030
seit: 01.10.2003

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 ..

Dieser Beitrag wurde von Chris: 15 Feb 2008, 17:02 bearbeitet


--------------------


bonum agere et bonum edere,
sol delectans et matrona delectans

(Verlängere dein Leben indem du hier und hier und hier und hier klickst!)
ProfilPM
AntwortenZitierenTOP
post 15 Feb 2008, 17:38

3. Schein
***

Punkte: 209
seit: 23.10.2006

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));
}


Dieser Beitrag wurde von Keinstein: 15 Feb 2008, 17:38 bearbeitet


--------------------
Ну заяц, погоди!
ProfilPM
AntwortenZitierenTOP
post 15 Feb 2008, 21:40
avatar
Are you afraid?
********

Punkte: 1648
seit: 11.10.2007

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.

Dieser Beitrag wurde von mmarx: 15 Feb 2008, 21:48 bearbeitet


--------------------
In my talons, I shape clay, crafting life forms as I please.
Around me is a burgeoning empire of steel.
From my throne room, lines of power careen into the skies of Earth.
My whims will become lightning bolts that devastate the mounds of humanity.
Out of the chaos, they will run and whimper, praying for me to end their tedious anarchy.
I am drunk with this vision. God: the title suits me well.
ProfilPM
AntwortenZitierenTOP
post 16 Feb 2008, 15:10
avatar
der vierkonsonantige
*********

Punkte: 3812
seit: 12.12.2003

kann man den rundungsmodus nicht umstellen?


--------------------
jeden tag einen dummen kommentar!
hab ich bei den fadfindern gelernt.
bild kann nicht angezeigt werden

bild kann nicht angezeigt werden bild kann nicht angezeigt werden bild kann nicht angezeigt werden bild kann nicht angezeigt werden
"if you have a hammer, every problem looks like a nail"
ProfilPM
AntwortenZitierenTOP
post 16 Feb 2008, 16:59
avatar
4. Schein
****

Punkte: 470
seit: 01.10.2003

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...
ProfilPM
AntwortenZitierenTOP
post 16 Feb 2008, 17:33
avatar
Are you afraid?
********

Punkte: 1648
seit: 11.10.2007

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.
ProfilPM
AntwortenZitierenTOP
1 Nutzer liest/lesen dieses Thema (1 Gäste)
0 Mitglieder: