[C/C++] int größer als float

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Klobesen, 14. Dezember 2008 .

Schlagworte:
  1. 14. Dezember 2008
    int größer als float

    Hey Leute!

    Ich habe ein C-Programm auf einen Microprozessor programmiert. Um Programmspeicher zu sparen, habe ich die float Variablen, die nicht zwingend float sein müssen auf int umgewandelt. Jedoch benötige ich jetzt mehr Programmspeicher, als wenn ich diese Variablen auf float gelassen hätte.

    Kann mir jemand erklären warum das so ist?

    Gruß
     
  2. 14. Dezember 2008
    Zuletzt von einem Moderator bearbeitet: 15. April 2017
    AW: int größer als float

    Das passt dazu: Int.,float wie viel Speicher - RR:Board

    Scheint aber, dass float und int den selben Speicherverbauch haben. Im Zweifelsfall solltest du also auf kleinere Variablentypen zugreifen (short)
     
  3. 14. Dezember 2008
    AW: int größer als float

    Das würde aber nur erklären, warum ich keinen Speicherplatz einsparen kann. Aber es erklärt nicht, warum der Speicherbedarf für int größer ist als für float.
     
  4. 14. Dezember 2008
    AW: int größer als float

    hast du das denn schon mit sizeof() überprüft?. Ansonsten such dir halt einen Typ, der weniger Speicher verbraucht (wie z.B. short).

    BTW: in dem bereits geposteten Link wird auch geklärt, dass float je nach Compiler unterschiedliche Größen besitzt. Vielleicht solltest du mal dort nachschauen
     
  5. 14. Dezember 2008
    AW: int größer als float

    Wer sagt denn bitte, dass der Speicherplatz von der Variablen verwendet wird?!

    Kleiner Tipp: Vergiss die Konvertierungen nicht! Die kosten in einigen Fällen extrem Speicher.
     
  6. 8. Januar 2009
    AW: int größer als float

    Ich hab es jetzt mit sizeof probiert und habe folgendes gesehen:

    short 2 Bit
    int 2 Bit
    float 4 Bit
     
  7. 8. Januar 2009
    AW: int größer als float

    Was meinst Du damit? Welche Konvertierung?
     
  8. 8. Januar 2009
    AW: int größer als float

    byte, nicht bit

    kannst du was von deinem code zeigen? dann können wir mal schauen.

    Wie hast du die float werte in Integer umgewandelt?
    von Hand z.B
    Code:
    float a = 5.6;
    durch
    int a =5.6;
    oder
    int a=5
    ersetzt
    
    solltest du int a = 5.6 gemacht haben wird die 5.6 so in das Programm als Literalkonstante einkompiliert. Das heißt wenn du dir den asm code anguckst steht da irgendwo 5.6 in Gleitkommadarstellung.
    Zur Laufzeit wird die 5.6 aus dem Speicher gefischt und in den Integerwert 5 umgewandelt. Dann noch nach a kopiert. Das bringt natürlich einiges an zusätzlichen Programmroutinen mit sich.

    wie gesagt, sollten erst sehen was du getan hast, bevor wir das phänomen erklären können
     
  9. 8. Januar 2009
    AW: int größer als float

    Ja, verschrieben. Natürlich mein ich Byte...


    Naja...ich wandle die Werte nicht direkt um. Ich bekomme von einem Messbaustein Werte, die ich in einer int Variable abspeichere. Anschließend multipliziere ich sie mit einem Faktor und das Ergebnis speichere ich dann in eine float Variable. Als Beispiel:

    float t;
    int t_mess;

    t = t_mess * 0.25;


    reicht Dir das als Beispiel?
     
  10. 11. Januar 2009
    AW: int größer als float

    Hallo!

    du solltest es lieber anders versuchen:

    float t;
    int t_mess;

    t = static_cast<float>(t_mess) * 0.25f;


    wenn man datentypen in andere umwandeln möchte sollte man immer vernünftig casten!
    genauso wenn du in die andere richtung willst (von float nach int):

    float f;
    int i;

    i = static_cast<int>(f);


    btw: das ist, was Tanya mit konvertieren meint

    MFG
    Pacman
     
  11. 11. Januar 2009
    AW: int größer als float

    Danke für die ausführliche Antwort.

    Leider funktioniert das bei mir nicht. Der Compiler gibt mir einen Syntax Error aus.

    Ist vielleicht irgendein Fehler in deinem Code????
     
  12. 12. Januar 2009
    AW: int größer als float

    die genaue fehlermeldung wäre hilfreich. Ich nehme an, dass du nicht alle nötigen header-dateien eingebunden hast. also ich weiß ausm Kopf jetzt auch nicht genau wo die Type Casts drin sind, aber wenn du einfach die <windows.h> mit einbindest ist bestimmt alles dabei =P zur Not nochmal nen Blick in die Standard Library von C++ schauen...
     
  13. 13. Januar 2009
    AW: int größer als float

    Er schreibt in seinem Post, dass er C verwendet, static_cast etc. sind aber c++-Casts.
    In C sehen die Casts ganz einfach so aus:

    Code:
    float t;
    int t_mess;
    
    t = (float)t_mess * 0.25f;
    sprich einfach den datentyp in klammern davor schreiben
     
  14. 15. Februar 2009
    AW: int größer als float

    Danke für eure gute Tipps. Ich habe jetzt die Konvertierungen so umgeschrieben.

    Aber ich bin jetzt draufgekommen, was der wirkliche Grund dafür war, dass der Speicherbedarf so explodiert ist. Der Compiler ist nur eine Demoversion und die Testzeit ist abgelaufen. Von da an hat er sämtliche Bibliotheken eingebunden, auch die, die gar nicht benötigt werden.
     
  15. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.