Division mit Double [Gelöst]

Hallo und guten Abend,

ich stehe gerade an mit meiner Division mit Double Variablen.
Ich habe einen kleinen Testsketch als Extrakt von meinem “großen” Sketch gebastelt.
Der serielle Monitor gibt mir auch hier für 13,5 + 13,5 / 2.00 statt der erwarteten 13,5 => 19,50 aus.

Was übersehe ich?

Danke
lg

double Input,wert1, wert2;

void setup() {
wert1 = 13,5;
wert2 = 13,5;
Serial.begin(9600);
}

void loop() {
Input = wert1 + wert2 / 2,00;
Serial.println(Input);

}

Das wert1 = 13,5 nimmt Dir doch nicht mal der Compiler ab. Wilst Du uns verarschen?

Gruß Tommy

night0222:
Was übersehe ich?

Punktrechnung vor Strichrechnung?

Ich schreib mal hier noch ein edit rein - weil das sonst zuviel neue Posts werden, wegen so einem Leichtsinn: (Bitte bis zu Ende lesen - da steht irgendwo auch die Lösung)
ALSO!
DATEI-VOREINSTELLUNGEN- den Haken gesetzt bei: "AUSFÜHRLICHE AUSGABE BEI

  • KOMPILIERUNG" und dann erneut versuchst zu kompilieren?

Dann bekommst Du folgende Meldung:

right operand of comma operator has no effect [-Wunused-value]

Und merkst, das da was nicht stimmt.
Microbahner hat es bereits geschrieben.

Wie Du auf die 19.50 kommst, ist ganz einfach:
13+13/2 entspricht 13+6.5 entspricht 19.5 -> Dein Ergebnis.
Hälst Du Dich an die Konventionen der Schreibweise, bekommst Du 20.25
Machst Du es richtig, indem Du zwingend erst die Strichrechnung erledigst und das Ergebnis dann halbierst, bist richtig.
Das kannst in eine Zeile schreiben - oder auch in zwei...

Tommy56:
Das wert1 = 13,5 nimmt Dir doch nicht mal der Compiler ab. Wilst Du uns verarschen?

Also sorry, aber das solltest Du nochmal überdenken.

Der serielle Monitor gibt sicher nicht 19,5 aus sondern 19.5 ( mit Dezimalpunkt ).

Das gilt auch für deine Konstanten. Der Compiler versteht nur Dezimalpunkte.

Hallo Tommy - der Compiler nimmt das schon an. Hinter dem Komma ist einfach eine weitere Anweisung. Wenn er die Warnungen einschalten würde, gäb's eine Info dazu ( .. has no effect ..)

MicroBahner:
Wenn er die Warnungen einschalten würde, gäb's bestimmt eine Info dazu ( .. has no effect ..)

Über so ein Ding bin ich auch mal gestolpert - und spätestens seitdem sind meine Kompilerwarnungen alle eingeschaltet - Ich hätte auch nicht gedacht, das das als neuer Operator erkannt wird.
Danke für die Bestätigung - ich habs jetzt auch nochmal kompiliert...

(deleted)

Ich hätte auch nicht gedacht, das das als neuer Operator erkannt wird.

Das Komma ist der Anweisungsverkettungsoperator, oder Sequenzierungsoperator.

Die 5 ist also kein neuer Operator.
Sondern:

  • Eine Anweisung.
  • Ein Ausdruck
  • Ein Literal
    Aber hier eben wirkungslos.

Danke my xy,

stimmt natürlich.

ich habe die Addition jetzt in Klammern gesetzt.

Ich hätte noch eine Verständnisfrage.
Warum macht es einen Unterschied ob ich für wert1 und wert2 für 13,5 ein komma oder einen Punkt setze?
Wenn ich ein Komma verwende ist die Rechnung falsch und der Monitor gibt 13.00 aus.

Bei der Division / 2.00 ist es jedoch egal ob ich ein Komma oder einen Punkt verwende, hier stimmt die Rechnung in beiden Fällen.

Wie schaltet man "alle" Compilerwarnungen" ein?

@Tommy: Auf diese Art der Kommunikation habe ich keine Lust.

night0222:
stimmt natürlich.
ich habe die Addition jetzt in Klammern gesetzt.

Na geht doch!

Ich hätte noch eine Verständnisfrage.
Warum macht es einen Unterschied ob ich für wert1 und wert2 für 13,5 ein komma oder einen Punkt setze?

Die Lösung steht in combies Antwort.

Bei der Division / 2.00 ist es jedoch egal ob ich ein Komma oder einen Punkt verwende, hier stimmt die Rechnung in beiden Fällen.

Mache mal aus 2.00 ein 2.5 und aus 2,00 ein 2,5 - merkst was?

Wie schaltet man "alle" Compilerwarnungen" ein?

ganz böse - steht oben.

Hammer Danke, die Antworten kamen wohl zu schnell :wink:

night0222:
Hammer Danke, die Antworten kamen wohl zu schnell :wink:

Und jetzt noch im ersten Post von Dir in der Betreffzeile ein [gelöst] rein.
Über diese schnelle Lösungsentwicklung bin ich nach den letzten Kapriolen auch sehr froh - hast meinen Abend gerettet und den Glauben an das Gute :wink:

MicroBahner:
Hallo Tommy - der Compiler nimmt das schon an. Hinter dem Komma ist einfach eine weitere Anweisung. Wenn er die Warnungen einschalten würde, gäb's eine Info dazu ( .. has no effect ..)

Meiner meckert.

test1:8:19: error: expected unqualified-id before numeric constant
 double wert1 = 11,5;
                   ^

Gruß Tommy

Tommy56:
Meiner meckert.

IDE-Version?

Meiner meckert.

Da hasste aber gemogelt!
:o

double wert1 = 11,5;

Das ist eine Definition, kein Ausdruck.

Darum ist das Komma da auch kein Ausdrucksverkettungsoperator, sondern sowas wie ein Definitionslistenoperator

So geht das dann ohne Meldung:

double wert1 = 11, zwiebeln = 5;

Im Eingangsbeispiel findet sich dagegen dieses:

double t; // global
t = 34,6; // local

Der Compiler benutzt die amerikanische Nummer-Convention. Da ist das Komma nicht der Beistich sondern der Punkt. Der Beistrich hat eine andere Bedeutung. Gleich wie der Punktstrich eine Bedeutung hat.

Grüße Uwe

combie:
Da hasste aber gemogelt!
:o
Das ist eine Definition, kein Ausdruck.

ok, da hast Du Recht. :wink:

Gruß Tommy

night0222:
@Tommy: Auf diese Art der Kommunikation habe ich keine Lust.

Kein Problem. Ich bin aus jeglicher Kommunikation mit Dir dann raus.

Gruß Tommy