Problem beim Rechnen mit AVR + großen Zahlen

#4918084
Lesenswert?

Hallo zusammen,

ich möchte folgendes in meinem AVR Mega1284p berechnen:

1
double temp = 342309/8388607;
2
double intdb = 20*log10(temp);

Leider klappt das nicht...

Wenn ich 342309/8388607 mit dem Taschenrechner rechne und direkt 
einsetze klappt es allerdings:

1
double intdb = 20*log10(0.04080641756);

Es scheint also irgendwas bei der Division schief zu laufen. Nur was?

So klappt es leider auch nicht:

1
double intdb = 20*log10(342309/8388607);

Vielen Dank schon mal für Eure Mithilfe!!
Gruß
Matthias
Gast #4918092
Lesenswert?

>ich möchte folgendes in meinem AVR Mega1284p berechnen:
>
>double temp = 342309/8388607;
>double intdb = 20*log10(temp);
>Leider klappt das nicht...

Versuchs mal so:

double temp = 342309.0/8388607.0;
double intdb = 20.0*log10(temp);

Double ist beim AVR-GCC aber auch nur float.
Also Single Precision.
#4918106
Lesenswert?

Tatsächlich... logisch... heieiei...

So geht es nun:

1
double intdb = 20*log10(rta1/8388607.0);

Danke vielmals für die Hilfe!!

(rta1 entspricht dem oben genannten Wert)

So nun möchte ich den Wert auf dem Display ausgeben:

So gehts, jedoch ohne Nachkommastellen:

1
double(BUFFER, "VALUE: %d",(int)intdb);

bei %f, %lf kommt immer ein ? als Ausgabe...

z.B.:

1
double(BUFFER, "VALUE: %f",intdb);

Vielleicht könnt ihr mir dabei auch noch helfen?
Danke!

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