Forum: Mikrocontroller und Digitale Elektronik STM32 Int, Float, Double


von Moritz M. (avrprogger)


Lesenswert?

Hallo,

ich hab eine schnelle Frage:

Wie groß sind die Datentypen Int, Float und Double bei den STM32 µC?

Moritz

von Lötlackl *. (pappnase) Benutzerseite


Lesenswert?

int 4 Bytes
float 4 Bytes
double 8 Bytes

mfg

von (prx) A. K. (prx)


Lesenswert?

Moritz M. schrieb:

> Wie groß sind die Datentypen Int, Float und Double bei den STM32 µC?

Wenn der Compiler sich an die Vorgaben des Standards und den gesunden 
Menschenverstand hält, dann 32, 32 und 64. Für Letzteres allerdings 
würde ich nicht blind die Hand ins Feuer halten, weil vielleicht mal 
jemand meint, dass 32-Bit double (Hardware) auf dem F4xx doch wirklich 
sooo viel schneller ist als 64-Bit (Software).

von Moritz M. (avrprogger)


Lesenswert?

Hallo,

char ist doch dann auch bestimmt 1 Byte oder? Ich verwende Atollic 
TrueStudio, dass auf GCC basiert. Damit wird es wahrscheinlich die 
Standards nutzen oder?

von Lötlackl *. (pappnase) Benutzerseite


Lesenswert?

char ist, wie Du richtig bemerkt hast, 1 Byte 'groß'.
Ich verwende CrossWorks, basiert meines Wissens auch auf gcc.

mfg

von Moritz M. (avrprogger)


Lesenswert?

Hallo,

okay sorry ist vielleicht ne blöde frage aber wie passt dann z.B. 4.567 
in einen "nur" 4 Byte große - float- Variable?

Moritz

von (prx) A. K. (prx)


Lesenswert?


von Moritz M. (avrprogger)


Lesenswert?

Hallo,

danke :)

von Falk B. (falk)


Lesenswert?

@  Moritz M. (avrprogger)

>okay sorry ist vielleicht ne blöde frage aber wie passt dann z.B. 4.567
>in einen "nur" 4 Byte große - float- Variable?

Dort passt auch 3.1415927 rein. Oder 123456789. Nur wird das halt binär 
kodiert und nicht zeichenweise wie ASCII oder BCD.

MFG
Falk

von Lötlackl *. (pappnase) Benutzerseite


Lesenswert?

..oder vorgekaut aus z.B.: 
http://www.henkessoft.de/C++/C++/grundlagen.htm
1
Der Datentyp float verwendet für die Mantisse 24 bit, für den Exponenten 7 bit und für das Vorzeichen ein bit und kann daher Werte im Bereich 3.4 * 10-38 bis 3.4 * 1038 aufnehmen. Die Darstellung ist auf 6 Nachkommastellen begrenzt.

Falk Brunner schrieb:
> Dort passt auch 3.1415927 rein.

Sicher?

von (prx) A. K. (prx)


Lesenswert?

** Lötlackl schrieb:

> Sicher?
1
#include <stdio.h>
2
3
float p1 = 3.1415927;
4
5
int main()
6
{
7
        printf("%.7f\n", p1);
8
}
=> 3.1415927

von Falk B. (falk)


Lesenswert?

Logisch, denn mein SR1 hat das immer so angezeigt ;-)

http://de.wikipedia.org/wiki/SR1_(Taschenrechner)

von (prx) A. K. (prx)


Lesenswert?

Falk Brunner schrieb:

> Logisch, denn mein SR1 hat das immer so angezeigt ;-)

Und der hatte 32 Bits? 8 Stellen mit Vorzeichen sind aber schon 33. ;-)

von Lötlackl *. (pappnase) Benutzerseite


Lesenswert?

A. K. schrieb:
> #include <stdio.h>
>
>
>
> float p1 = 3.1415927;
>
>
>
> int main()
>
> {
>
>         printf("%.7f\n", p1);
>
> }
>
> => 3.1415927

tatsächlich!
1
Die Darstellung ist auf 6 Nachkommastellen begrenzt.
Was behaupten die denn für'n Mist? Bin ich zu doof zum zählen?
Müssen wir nun Herrn Buchegger bemühen?

mfg

von (prx) A. K. (prx)


Lesenswert?

Da geht auch noch mehr:
1
#include <stdio.h>
2
3
float p1 = 3.141592741013;
4
5
int main()
6
{
7
        printf("%.12f\n", p1);
8
}
=> 3.141592741013

von ruben o. (ruben_o)


Lesenswert?

Hallo Jungs,

habt ihr eine Idee, wie man einen Wert(float) in Char array umwandeln 
kann.
verwende gerade den stm32F407, keil Compiler.

Danke

von holger (Gast)


Lesenswert?

>habt ihr eine Idee, wie man einen Wert(float) in Char array umwandeln
>kann.

sprintf, snprintf?

von Steel (Gast)


Lesenswert?

A. K. schrieb:
> ** Lötlackl schrieb:
>
>> Sicher?
> #include <stdio.h>
>
> float p1 = 3.1415927;
>
> int main()
> {
>         printf("%.7f\n", p1);
> }
> => 3.1415927

Gib doch mal mehr Stellen aus...

3.1415927 lässt sich Binär nicht genau in einem float speichern, 
vielmehr wird 3,14159274101257... abgespeichert, was dann wieder zu 
3.1415927 gerundet wird bei der Ausgabe mit 7 Nachkommastellen.

von (prx) A. K. (prx)


Lesenswert?

Steel schrieb:
> Gib doch mal mehr Stellen aus...

Hab ich doch vor fast einem halben Jahr schon gemacht:
Beitrag "Re: STM32 Int, Float, Double"

PS: Ich weiss wie binäre Fliesskommadarstellung funktioniert. Probier 
mal einfachere Zahlen, wie 0.1. ;-)

von Steel (Gast)


Lesenswert?

A. K. schrieb:
> Steel schrieb:
>> Gib doch mal mehr Stellen aus...
>
> Hab ich doch vor fast einem halben Jahr schon gemacht:
> Beitrag "Re: STM32 Int, Float, Double"

Oh, holger hat den ollen thread hochgeholt...

Trotzdem:

[ ] Du hast verstanden
[X] Du hast nicht verstanden

von (prx) A. K. (prx)


Lesenswert?

Steel schrieb:
> [ ] Du hast verstanden
> [X] Du hast nicht verstanden

Macht nix, ihr mich nämlich auch nicht. ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.