Preprocessor frage ARM<->Xmega

OP #5244254
Lesenswert?

Hi
versteht einer warum ich hier 2 verschiedene Resultate kriege?
Jeweils der IAR Compiler für XMEGA und Stm32F0 ARM
es geht um folgende Zuweisung:

volatile uint32_t Temp = (u32)((357.796/ 40ul) *16777216ul);

Auf Xmega16 ist Temp = 0x08F1E4F0
Auf STM32F0 ist Temp = 0x08F1E4F7
???????
#5244271
Lesenswert?

Habs mal kurz ausprobiert und wie vermutet bekomme ich Deine beiden 
ergebnisse mit nur einem Compiler.

XMEGA rechnet mit floats

#include <stdio.h>
#include <stdint.h>

void main(void)
{
double xd=357.796;
float xf=357.796;
uint32_t Temp1 = (uint32_t)((xd/ 40ul) *16777216ul);
uint32_t Temp2 = (uint32_t)((xf/ 40ul) *16777216ul);


printf("%x %x\n",Temp1,Temp2);
}
#5244502
Lesenswert?

Rolf M. schrieb:
> A. K. schrieb:
>> Martin B. schrieb:
>>> Aber eigentlich sollte der XMEGA Preprocessor ja in double rechnen.
>>
>> Daumenregel: Zu 99.9% ist die Aussage falsch, dass der Präprozessor
>> irgendwas berechnet.
>
> Wenn es um Gleitkomma geht, ist die Aussage zu 100% falsch.

Mensch, wie kann ich das nur wieder gut machen? Hatte es schon 
zugegeben. Hoffentlich verzeiht ihr mir.

Der Praeprocessor ist unschuldig.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren