Forum: Compiler & IDEs AVR-Studio4: Multiplikation gibt merkwürdige Werte


von HelmutG (Gast)


Lesenswert?

Hallo,

habe hier eine Multiplikation, die merkwürdige Erbebnisse liefert.
1
volatile uint64_t a;
2
3
volatile uint16_t x = 577;
4
5
a = x * 487;

Liegt das Problem darin, dass ich verschiedene Variabel-Typen verwende?


Wenn ja, müsste ich auf uint64_t casten?
1
a = (uint64_t) x * 487;

von Peter II (Gast)


Lesenswert?

HelmutG schrieb:
> Liegt das Problem darin, dass ich verschiedene Variabel-Typen verwende?

welchen Problem denn? Was kommt denn raus?

ein cast sollte hier nicht notwendig sein, der größer Datentype der 
beiden Faktoren wird genommen.

von Peter II (Gast)


Lesenswert?

Mist

ja du brauchst den cast, weil x ja nur 16bit ist

von Yalu X. (yalu) (Moderator)


Lesenswert?

Da das Produkt nicht in 16 Bit, aber immerhin in 32 Bit darstellbar ist,
reicht es, einen der beiden Operanden auf 32 Bit hochzucasten, so dass
die gesamte Multiplikation ebenfalls in 32 Bit ausgeführt wird. Für die
Variable a reicht für ein uint32_t statt eines uint64_t.

von HelmutG (Gast)


Lesenswert?

Danke für die schnellen Antworten!!!

Erstaunlicherweise scheint es manchmal auch ohne Casten zu gehen, warum 
auch immer!?!



Kann man die natürlichen Zahlen für Additionen, Multiplikationen, 
Divisionen usw. eigentlich grundsätzlich problemlos verwenden?

Also wie hier die 487:

a = (uint64_t) x * 487;

Oder muss man hier auch auf spezielle Eigenheiten achten?

von Oliver S. (oliverso)


Lesenswert?

HelmutG schrieb:
> Kann man die natürlichen Zahlen für Additionen, Multiplikationen,
> Divisionen usw. eigentlich grundsätzlich problemlos verwenden?

Narürlich nicht. An gerade Wochentagen geht das nur mit Addition und 
Division, an ungeraden nur mit Multiplikation und Subtraktion. An 
Wochenenden umgekehrt, und jeden 29. Februar kommt immer 42 raus.

Division durch Null ist dann noch ein Sonderfall.

Alles weitere dazu steht in deinem C-Buch.

Oliver

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

HelmutG schrieb:
> Danke für die schnellen Antworten!!!
>
> Erstaunlicherweise scheint es manchmal auch ohne Casten zu gehen, warum
> auch immer!?!

Ganz einfach: weil du die C Regeln nicht kennst. Da ist nichts 
geheimnisvolles drann und so schwierig sind die auch wieder nicht. Die 
stehen in jedem noch so grindigem C-Buch drinnen. Und zwar irgendwo ganz 
am Anfang in den ersten Kapiteln. Aber: wie so viele andere, denkst auch 
du, dass du ohne ordentliche Literatur C lernen kannst. Vielleicht noch 
mit irgendeinem windigen online Tutorial, das den Strom nicht wert ist, 
den man für die 10 HTML Seiten braucht um sie zu lesen und von denen der 
Autor denkt, das wäre alles was man über C wissen müsse (und bei dem von 
der wenigen präsentierten Information dann auch noch die Hälfte falsch 
ist)

Sorry. Aber das ist so.

: Bearbeitet durch User
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.