Int Real Variablen

  • Hi,


    ich habe folgendes Problem


    ich habe folgende zahlen
    INT zahl =824036929
    REAL ZahlR


    bei
    ZahlR=Zahl


    bekomme ich allerding
    ZahlR=824036900


    das finde ich etwas verwirrend. woran kann das liegen?


    ich will folgendes implementieren: berechnung modulo (division mit rest)



    Robbi ist ein KR3 mit KRC 2, KRL 5.2.12


    Gruß Thoms

  • Schritt für Schritt zum Roboterprofi!
  • Hallo,


    Zitat

    das finde ich etwas verwirrend. woran kann das liegen?


    Ganz einfach die Zahl ist nicht ekakt als REAL darstellbar. Es gibt auf jedem Rechner für bestimmte Datenformate bestimmte zulässige Datenbereiche, d.h. zur Darstellung der Zahlen steht nur eine gewisse Anzahl an Bits zur Verfügung. Soweit ich weiss sind intern die Reals etwa single precision floats (auf 32Bit-Systemen) und die reichen eben nicht um deine Zahl darzustellen. Damit kommt es zu Rundungsfehlern, d.h. du erhältst die nächstgelegene reele Zahl, die gerade noch über die Anzahl vorhandener Bits darstellbar ist.


    Nachdem ich jetzt an dieser stelle nicht über Gleitkommazahlen, Mantissen und Exponenten auslassen will (und es dafür sicher besser geeignetere als mich gibt :lol:) sei hier nur auf Numerik- oder Informatikeinführungsbücher verwiesen. Ich bin mir sicher man findet aber auch unter den o.g. Schlagworten etwas in Wikipedia dazu.


    Gruß
    Fubini

    Einmal editiert, zuletzt von fubini ()

  • Zitat

    Es gibt auf jedem Rechner für bestimmte Datenformate bestimmte zulässige Datenbereiche, d.h. zur Darstellung der Zahlen steht nur eine gewisse Anzahl an Bits zur Verfügung. Soweit ich weiss sind intern die Reals etwa single precision floats (auf 32Bit-Systemen) und die reichen eben nicht um deine Zahl darzustellen.


    Hi,


    also ich glaube daran kann es eigentlich nicht liegen, denn laut Handbuch (Programmierhandbuch expert v 5.2) gehen
    INT bis (2^31)-1 = ca. 2,2*10^9
    und
    REAL bis 3.4*10^38


    Allerdings hab ichs vorhin mal mit ner kleineren Zahl ausprobiert (x*10^5) und da hat es Funktionert.. aber laut dem angegeben Wertebereich.. Ich mein von 10^9 auf 10^38 ist schon noch ein stück Platz.... :nocheck:


    Ich versuch einfach mal die höchstwertigen 3 oder 4 Bits der Intergervariablen mit 0 zu maskieren und guck was da raus kommt.


    Aber wenn jemand noch ne Idee hat dann wäre ich für die Hilfe sehr dankbar!


    Gruß thoms

    Einmal editiert, zuletzt von thoms ()

  • Hallo nochmal,


    also es stimmt offenbar doch (entschuldige die Zweifel) aber die Präzision auf 1er ist bei 32 bit Systemen nach IEEE mit 8bit exp und 23bit mantisse offanbar nur bis 1.6777215*10^7 möglich. :wallbash: :wallbash: :wallbash:


    Ärgerlich!!!
    Bedeutet für meinen Zufallsgenerator dass ich die letzten 8 Bit der Integervariable (SIGNAL oZufall2 $OUT[544] to $OUT[575]) also $OUT [568] bis $OUT [575] mit 0 maskieren muss.


    Danke für die Hilfe!
    Gruß Thoms

    Einmal editiert, zuletzt von thoms ()

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden