berechnung von floats



  • Hallo zusammen, vielleicht kann mir einer von euch helfen.
    Ich soll ein C++ programm schreiben, dass drei inputs verlangt: p, emin, emax.
    dann soll ich zu jeder zahl im system F*(2,p,emin,emax) einen kreis mit radius x zeichnen (um 0,0).
    nun ja eine for schlaufe zu machen um den exponenten emin bis emax laufen zu lassen ist einfach. aber irgendwie sollt ichs nun noch schaffen (rekursiv vielleicht) alle binärzahlen im system darzustellen.
    also wenn p==1 ist, dann gibts genau 1*2^emin bis 1*2^emax
    aber wenn p==2 ist, hab ich schon 1 und 1.1
    bei p==3, 1 1.1 1.01 1.11
    bei p==4, 1 1.1 1.01 1.11 1.001 1.011 1.111 1.101

    ich hab also immer 2^p-1 mögliche zahlen (und dann noch die variaton des exponenten von emin bis emax.... )

    wie mach ich das?

    danke im voraus



  • also ich geb euch noch die original aufgabe, vielleicht hab ich sie ja missinterpretiert:

    write a program fpsys.C to visualize a normalized floating point number system F*(2,p,emin,emax). the program should read the parameters p,emin and emax, as inputs and for each number x from F*(2,p,emin,emax) draw a circle of radius x around the origin. use the library libwindow to create graphical output.



  • kann mir denn keiner helfen? oder hab ich was nicht gut berschrieben?



  • ichbinsschonwieder schrieb:

    .. oder hab ich was nicht gut berschrieben?

    Na ja, es ist wohl nicht für jeden offensichtlich was mit F*(2,p.emin,emax) gemeint ist. 😉

    Nachdem ich ein bißchen mit Google gesucht habe, meine ich Dein Problem wie folgt verstanden zu haben.
    Du sollst (alle!) Float-Werte berechnen, die sich aus
    ein_float = m * 2^e
    berechnen. Wobei m (die Mantisse) im Binär-System mit einer Stellenanzahl von 'p' gegeben ist und e von emin nach emax läuft. m hat immer die Form (im Binärsystem) 1.xxxx wobei x nur 0 oder 1 sein kann; und p-1 x'e zur Verfügung stehen.

    Dann könnte die Lösung etwa so aussehen:

    int emin, emax, p;
        // Input einlesen ..
        for( int exp = emin; exp <= emax; ++exp )
        {
            const int n = 1 << (p - 1);  // = 2^(p-1)
            for( int nach_komma_zahl = 0; nach_komma_zahl <= (n - 1); ++nach_komma_zahl )
            {
                double die_float_zahl = (1.0 + double( nach_komma_zahl ) / double( n )) * pow( 2, exp);
                // mache was mit 'die_float_zahl'
            }
        }
    

    Gruß
    Werner


Anmelden zum Antworten