Neuer Fließkommatyp
-
Hallo,
bisher habe ich mittels
typedef float FLOAT;
meinen eigenen Fließkommatypen definiert und in sämtlichen Bibliotheken verwendet. Falls ich höhere Genauigkeit brauche, habe ich ihn auf double gesetzt und gut war.
Unter Linux und gcc 3.4.6 klappt das ja wunderbar, auch in Zusammenhang mit X11 und OpenGL.
Wenn ich das Ganze jedoch mit DevC++ 5.0 unter Win32 versuche (benutzt intern mingw32), stört er sich daran, dass z.B. in wingdi.h bereits FLOAT definiert ist.
Nun könnte ich ja anstelle FLOAT auch FLOAT99 nehmen usw. aber das kann doch nicht der Weisheit letzter Schluß sein.Gibt es da irgendeinen Trick (evtl. namespace), um das mit dem eigenen FLOAT zum Laufen zu bekommen?
Danke und Gruß
Oliver
-
klar, pack dein typedef in nen namespace. oder verzichte drauf und mach von vornherein alles in double

-
gibt ja einige andere namen...
Float
floatT
float_t(wie wchar_t)oder, wenn du keine Windowsfunktionen in dem Abschnitt nutzt:
#undef FLOAT@thordk leider werden in der windows.h keine typedefs genutzt, nur Makros.
-
-
leider werden in der windows.h keine typedefs genutzt, nur Makros.
falsch. jedenfalls nicht in der neusten version.
-
type schrieb:
leider werden in der windows.h keine typedefs genutzt, nur Makros.
falsch. jedenfalls nicht in der neusten version.
naja, bei mir is halt alles voller Makros. wenn sie das geändert haben is das sehr gut.
-
otze schrieb:
type schrieb:
leider werden in der windows.h keine typedefs genutzt, nur Makros.
falsch. jedenfalls nicht in der neusten version.
naja, bei mir is halt alles voller Makros. wenn sie das geändert haben is das sehr gut.
Es ist immernoch "alles voller Macros", bloss werden *auch* typedefs verwendet.
@oliver67: nenn deinem Typ float_t und pack ihn in einen Namespace, zusammen mit allen Libraries von dir.
-
fl04t
-
Wieso float eigentlich selberdefinieren? Was macht das für nen Unterschied?
-
in Ogre nennen sie die selbstdefinierte Fließkommazahl Real. kannst ja auch mal in erwägung ziehn.
-
Cappo schrieb:
in Ogre nennen sie die selbstdefinierte Fließkommazahl Real. kannst ja auch mal in erwägung ziehn.
Schonmal vielen Dank für die vielen Antworten.
@otze & cappo & huestbaer
man kann natürlich statt FLOAT Real nehmen oder flOAt usw. Mir ging es um eine generelle Problemlösung, ohne diesen Umweg. Ansonsten könnte das Problem der Doppeltbelegung ja bei der nächsten wingdi.h theoretisch wieder auftauchen und die nächste Umbenennung wäre notwendig.@mikey, Warum überhaupt
Ich wollte einen eigenen haben, mit die ganzen eigenen Routinen typisiert werden. Dann sollten z.B. Rundungsfehler oder Geschwindigkeitsverluste bei double-float und umgekehrt wegfallen.Ich arbeite auch mit templates, aber bei Objekten/Klassen war mir das alles zu umständig.
Gruß
Oliver
-
Hi,
Du könntest den von Windows definierten Typ löschen mit #undef FLOAT
und dann deinen definieren.
-
Jogkurt schrieb:
Hi,
Du könntest den von Windows definierten Typ löschen mit #undef FLOAT
und dann deinen definieren.dachte ich zuerst auch, dann kommt aber sowas
...oleauto.h:363: error: declaration of C function 'HRESULT VarUI1FromR4(FLOAT, BYTE*)' conflicts with
...oleauto.h:248: error: previous declaration 'HRESULT VarUI1FromR4(float, BYTE*)' herelogisch, da mein FLOAT identisch ist mit double.
Ich habe jetzt in ole2auto.h alle FLOAT in float ersetzt, nun klappt es. Ganz wohl ist mir dabei aber nicht, eine vom Compiler bereitgestellte *.h zu ändern.
Gruß
Oliver
-
Warum bennenst du nicht einfach dein FLOAT um? Großgeschrieben Typnamen sind ja eh hässlich. (Außerdem könnte man so meinen, das FLOAT immer ein float sei. zB real wäre imho ein besserer Name).
(Und Nein, Header die der Compiler mitliefert sollte man im Normalfall nicht ändern!)
