Long mit float multiplizieren

Gast #6093932
Lesenswert?

T.M .. schrieb:
> Hallo,
>
> wie kann ich in der Arduino IDE ein long mit einem float-Wert von 1.14
> multiplizieren?
>
> long zahl;
> zahl = zahl * 1.14;
>
> Als Ergebniss sollte 114 herauskommen (als long, ganzzahlig)

OMG

Wie weit kann das Niveau denn noch sinken?

Also das Arduino-System hat definitiv zumindest eine Sache geschaffen: 
Arduidioten...
#6093939
Lesenswert?

T.M .. schrieb:
> long zahl;
> zahl = zahl * 1.14;
>
> Als Ergebniss sollte 114 herauskommen (als long, ganzzahlig)

So kommt was undefiniertes raus, weil zahl nicht initialisiert wurde.

Walter T. schrieb:
>> zahl = zahl * 1.14;
>
> Fast.
> zahl = 1.14 * zahl;

Was soll da der Unterschied sein?
Man kann auch einfach schreiben:
1
zahl *= 1.14;

Zu beachten ist allerdings, dass beim Ergebnis der Nachkomma-Teil 
einfach abgeschnitten wird. Es wird nicht gerundet.

Walter T. schrieb:
> Dauert aber.

Und braucht viel Flash. Man sollte also überlegen, ob man nicht auch 
ohne float auskommt.
OP #6093943
Lesenswert?

Hallo,

oh danke, ich sehe gerade in meinem Code einen Tippfehler hatte und das 
ich 1,14 geschrieben hatte anstatt 1.14

..damit funktionierts dann :)

>Und braucht viel Flash. Man sollte also überlegen, ob man nicht auch ohne float 
auskommt.

Ok, wäre das zB besser:
(zahl*114)/100

EDIT: sehe gerade dass oben schon ein Vorschlag kam
Beitrag #6093964 wurde von einem Moderator gelöscht.
Gast #6093993
Lesenswert?

>(zahl*146)/128
Würde ich auch so machen.
Wobei man es noch zu

(zahl*73)/64 reduzieren könnte, was die Wahrscheinlichkeit eines 
Überlaufs etwas reduziert.

oder ganz ohne Überlaufgefahr (in der Zwischenrechnung)
(zahl / 8 ) + (zahl / 64) + zahl


>Einfach mal selbst den Assembler code anschauen...
Dann würde ich auch noch:

(zahl*36)/256 + zahl

anschauen. Hier wird ein ganzes Byte geschoben. Vielleicht effektiver.
#6094056
Lesenswert?

T.M .. schrieb:
> oh danke, ich sehe gerade in meinem Code einen Tippfehler hatte und das
> ich 1,14 geschrieben hatte anstatt 1.14

Wenn Du
1
    long zahl{};
2
    zahl = zahl * 1, 14;

schreibst, solltest Du eine Warnung bekommen, dass der rechte Operand 
des ,-Operators (Komma) keinen Effekt hat. Also: Du hast die Warnung 
ignoriert, was für Anfänger immer tragisch ist.

Dein Code war damit identisch zu:
1
    long zahl{};
2
    (zahl = zahl * 1), 14;

Und jetzt darfst Du auch mal nachdenken, was da passiert.

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