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 integer

    Unter 32Bit bleibt es bei

    cvtsd2si eax, xmm0
    

    hier kann nur die FPU helfen.

    Nicky


Log in to reply