float korrekt in long konvertieren



  • ich programmiere grade ein kleines Betriebssystem
    C Unterstützung funktioniert schon fast, ein Problem habe ich allerdings:

    ich hab die Fließkommaemulation mit eingelinkt, da das Ganze auch auf alten Prozessoren laufen soll, die eventuell noch keine FPU haben
    (FPU ist ein bestimmter Teil in Prozessoren, der sich ums Rechnen kümmert)

    allerdings schaffe ich es nicht ein float in ein long zu konvertieren
    eigentlich mach ich das so:

    long l = 0;
    float f = 0;
    
    long = (long)f;
    

    beim kompilieren und linken kommt auch kein Fehler, erst wenn ich das Ganze dan starte, hängt es sich komplett auf

    das komische ist das dieser Fehler nur beim Konvertieren auftritt, wenn ich mit Floats rechne gibt es kein Problem

    also sieht vielleicht jemand einen Fehler in dem Code?
    oder kennt jemand einen Umweg mit dem man allgemein Fließkommazahlen in norma umwandeln kann?
    (also nicht nur float in long, auch double in short, usw.)



  • Du meinst wohl folgendes:

    l = (long)f;
    

    Passiert das mit int auch? *wild drauf los rat*



  • ja stimmt das meinte ich, hab ich im Source auch so gemacht
    habs jetzt verbessert

    wenn ich shorts oder longs in das jeweils andere konvertiere, gibt es kein Problem

    wenn dann aber floats und doubles ins Spiel kommen geht gar nichts mehr,
    ich kann mit denen zwar ganz normal rechnen,
    aber ich kann weder floats in doubles (oder umgekehrt),
    noch floats, oder doubles in shorts, oder longs (oder umgekehrt) umwandeln

    und ints sind ja nichts anderes wie shorts, oder longs
    in 16 Bit C sind sie shorts
    in 32 Bit C sind sie longs

    weis vielleicht jeman dwarum das nicht klappt, oder kennt einen Umweg?



  • Dieser Thread wurde von Moderator/in c.rackwitz aus dem Forum ANSI C in das Forum Compiler-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • das problem liegt nicht am c sondern am compiler. welchen verwendest du ueberhaupt?



  • ich benutz Turbo C, von dem Ding benutz ich auch die Fließkommaunerstüzung, die scheint da irgendwie Mist zu bauen

    na egal, ich link jetzt mal statt der Emulation die FPU-Unterstützung ein, vielleicht funktioniert die beim Turbo C besser

    EDIT:
    wenn ich die FPU benutz geht zumindest mal double in float und umgekehrt,
    aber ich muss unbedingt floats, oder doubles in shorts, oder longs umwandeln
    sonst kann man Grafik total vergessen

    naja, ich geh mal n'bisschen Googlen, vielleicht hatte der Turbo C schon immer Probleme damit, oder so
    nur doof das der schon so alt ist



  • Warum benutzt du Turbo C? Das Ding ist doch wirklich uralt. Da können auch mal ungefixte Bugs vorkommen.



  • weil ich 16 Bit code brauche, um in überhaupt im Real Mode benutzen zu können,
    einen anderen 16 Bit Compiler kenne ich nicht



  • schau dir vielleicht mal OpenWatcom an (http://www.openwatcom.org/index.php/Detailed_Contents)



  • stimmt das Ding probier ich mal,
    das wollte nie mit ld zusammenarbeiten, deswegen hab ichs nie genommen,
    aber jetzt benutz ich ja sowiso JLoc

    aber ich glaub das Teil hatte immer ein Problem damit code zu erzeugen der nicht nur unter Dos läuft

    na mal schaun, vielleicht gibts sowas wie ne free-standing option


Anmelden zum Antworten