Gelöst: Konvertierung 64Bit Fließkommazahl nach 64Bit Integer (SSE2)
-
Hallo,
ich suche eine Möglichkeit eine 64Bit Float nach 64Bit Int (Vorzeichen egal)
umzuwandeln.Die FPU macht ihr Arbeit ordentlich aber gibts da nicht auch was von SSE2/SSE3?
Folgendes habe ich gefunden aber das Resultat ist zu "klein".
cvtsd2si ecx, xmm0 ;wandelt in 32Bit Int mit Vorzeichen um
Nicky
-
supernicky schrieb:
... aber das Resultat ist zu "klein".
cvttsd2si ecx, xmm0 ;wandelt in 32Bit Int mit Vorzeichen um
??
Sehe ich das richtig, oder ist hier schlicht "ecx" (als source) "zu klein" für dein Vorhaben?!
-
das ist es in der tat.
Er wandelt die 64bit Fließkommazahl aus xmm0 in eine 32Bit Ganzzahl mit Vorzeichen um.
Ich möchte ein Float ins ASCII Format umwandeln.
Dazu multipliziere ich die Float z.B. mit 10000.0
und speichere sie als Int ab, somit habe ich bis 4
Nachkommastellen.
Der Rest erfolgt wie gewohnt.Zahl / 10 = Nachkommastelle, dann + 48 = ASCII.
Wenn mein Float nun schon 2.000.000.000 ist, was ja
immer noch in 32bit passt, sieht es nach der Multiplikation
schon anders aus. Dafür brauch ich dann den 64Bit Integer.Wie gesagt, die FPU kann es auch.
für Hilfe wie immer dankbar,
Nicky
Das es entsprechende Windows-Funktionen (ftoa) gibt, ist mir bekannt aber für
mein Vorhaben nicht anwendbar.
-
falls es noch jemanden interessiert...
in einer 64Bit Anwendung kann man
cvtsd2si rax, xmm0
nutzen...
Das wandelt die 64bit Fließkommazahl in eine 64bit Integer um und
speichert sie in RAX.Intel 64 and IA-32 Architectures Software Developer's Manual
Seite 129:
CVTSD2SI Convert scalar double-precision floating-point values to a doubleword integerUnter 32Bit bleibt es bei
cvtsd2si eax, xmm0
hier kann nur die FPU helfen.
Nicky