long als float interpretieren



  • wie schaffe ich es, daß eine long variable als float vom rechner interpretiert wird. mir fällt da nur die variante ein, daß die long variable als zum pointer gecastet wird und dann zum floatpointer gecastet. geht das auch leichter?
    Gruß Patrick



  • long wird doch eh implizit zu float gecastet

    long foo=1;
    float bar=foo;
    


  • @kingrudie
    bei dem impleziten gecaste wird aber der wert übernommen und dabei fallen die kommastellen weg. ich möchte die bits in der float variablen verändern oder tielweise float variablen per hand erzeugen.
    Gruß Patrick



  • long l=13;
    float f = *((float*)&l);
    

    is doch net so schwer 🙂
    oder:

    long l=13;
    float f;
    memcpy(&f,&l, sizeof(float));
    

    [ Dieser Beitrag wurde am 15.04.2003 um 08:40 Uhr von dEUs editiert. ]



  • das muesste am besten so gehn. Aber achtung! Du musst dir anschauen wie auf deinen Sys. float und long aufgebaut ist.

    struct myfloa
    {
    unsigned signed:1;
    unsigned expo:8;
    unsigned mantisse:23;
    }

    wenn du jetzt noch mit long setzen moechtest:

    union float_long
    {
    struct myfloat s_float;
    float f_float;
    long f_long;
    }

    //...

    union float_long a;
    //...

    a.f_long=longvar;
    a.s_float.signed=1;

    //... usw.

    [ Dieser Beitrag wurde am 15.04.2003 um 09:45 Uhr von xroads42 editiert. ]



  • @xroads42
    da muß man tierisch aufpassen mit bit-alignment. da ist das mit memcopy besser.
    danke an alle!
    Gruß Patrick



  • ausserdem gabs schon mal no grosse diskussion drüber ob man den unions für sowas verwenden solle (dürfe?) und ich glaub die antwort war das man das nicht tun sollte...



  • Wo ist definiert, dass sizeof(float)==sizeof(long)?

    Spätestens bei der x86-64 Architektur könnte das zu Problemen führen...


Anmelden zum Antworten