Forum: Mikrocontroller und Digitale Elektronik Denkfehler Umrechnung


von Tom (Gast)


Lesenswert?

ich will das x=80 ist
aber irgendwie scheint hier was anderes herauszukommen..was mache ich 
falsch?

x:=315-((235/120)*120);

von Maxx (Gast)


Lesenswert?

Tom schrieb:
> x:=315-((235/120)*120);

Warum nicht x:=80? Dann hast du 80.

Also: Woher kommen die Zahlen und die Rechnung?
Zudem: In welchem Körper / Zahlensystem rechnest du?

In der Menge der nat. Zahlen kommt oben 195 raus ...

von da1l6 (Gast)


Lesenswert?

(235/120) == 1 bei Integer division

von Serge (Gast)


Lesenswert?

Tom schrieb:
> ich will das x=80 ist
> aber irgendwie scheint hier was anderes herauszukommen..was mache ich
> falsch?
>
> x:=315-((235/120)*120);

Zuerst multiplizieren - dann dividieren.

x:=315-((235*120)/120);

von Pete K. (pete77)


Lesenswert?

Klammern falsch gesetzt. So gehts:
x:=(315-235)/120*120

Das 120/120 kann man sich dann natürlich sparen...

von Tom (Gast)


Lesenswert?

hmpf ich dachte der rechnet intern mit flot und wenn das Ergebnis 
ganzzählich ist, isrt es völlig egal :-(
gibt es einen eleganteren weg als erst mit float zu rechnen und dann mit 
xint=xfloat; zu konvertieren?

von Florian W. (Firma: Pesch Marinescheinwerfer) (seematzfw)


Lesenswert?

Angenommen der Datentyp ist eine Ganzzahl (int, long), dann steht 
bedingt durch die Klammer um 235/120 dort in etwa x=315-(1*120), es 
sollte also 195 als Ergebnis rauskommen.

Nimm die Klammer weg, dann optimiert das der Compiler das hin- und 
hergerechne eh weg und rechnet einfach 315-235 oder rechne mit Floats, 
dann kommen die richtigen Ergebnisse auch mit Klammern raus, solange du 
am Ende geschickt rundest, um vorherige Rechenfehler bei den 
Einzeloperationen auszugleichen.

MfG
Florian

von Tom (Gast)


Lesenswert?

120*120 muss ganz sicher falsch sein :-)

von Tom (Gast)


Lesenswert?

die ganzen zahlen sind natürlich variablen im programm und dienen hier 
nur der vereinfachung!

von Maxx (Gast)


Lesenswert?

Pete K. schrieb:
> Klammern falsch gesetzt. So gehts:
> x:=(315-235)/120*120
>
> Das 120/120 kann man sich dann natürlich sparen...

Nein.
Wenn die vorherige Rechnung 195 ergibt, dann diese genau 0.

Ist doch jetzt nicht so schwer a) Klammersetzung b) von links nach 
rechts und c) nach jedem Schritt den Nachkommateil zu vergessen.

x:=(315-235)*120/120

Aber auch nur dann, wenn (315-235)*120 als größter Zwischenwert noch in 
den Datentyp passt.

von Günter Lenz (Gast)


Lesenswert?

Ich habe es mit QBASIC ausprobiert.

CLS
x = 315 - ((235 / 120) * 120)
PRINT x

QBASIC bekommt 80 raus.


----------------------------------

Python:

>>> x = 315 - ((235 / 120) * 120)
>>> x
80.0
>>>

Und Python bekommt auch 80 raus.

von Tom (Gast)


Lesenswert?

mit float oder integer?

von Yalu X. (yalu) (Moderator)


Lesenswert?

Günter Lenz schrieb:
> Ich habe es mit QBASIC ausprobiert.
> ...
> QBASIC bekommt 80 raus.
>
> ----------------------------------
>
> Python:
> ...
> 80.0

Die Zuweisung mit := deutet eher auf Algol oder Pascal hin. In beiden
Sprachen kommt aber ebenfalls 80.0 heraus. Sollte stattdessen 195
herauskommen, geht es hier wahrscheinlich um BCPL ;-)

von Mark L. (Gast)


Lesenswert?

Tom schrieb:
> hmpf ich dachte der rechnet intern mit flot

Who the fuck ist "der"?

von npn (Gast)


Lesenswert?

Günter Lenz schrieb:
> Ich habe es mit QBASIC ausprobiert.
>
> CLS
> x = 315 - ((235 / 120) * 120)
> PRINT x
>
> QBASIC bekommt 80 raus.
>
> ----------------------------------
>
> Python:
>
>>>> x = 315 - ((235 / 120) * 120)
>>>> x
> 80.0
>>>>
>
> Und Python bekommt auch 80 raus.

Auch mit dem Taschenrechner kommt 80 raus.
Und mit dem Windows-Rechner auch.

von Maxx (Gast)


Lesenswert?

npn schrieb:
> Und mit dem Windows-Rechner auch.

Drück mal ALT+3 und versuch es nochmal.

von Tomi (Gast)


Lesenswert?

Günter Lenz schrieb:
> Und Python bekommt auch 80 raus.

Das gilt für Python 3, das sinnvollerweise nur auf besonderen Wunsch 
(mit //) ganzzahlig dividiert.

Mit Python 2, das ints ganzzahlig dividiert, kommt 195 raus.

von npn (Gast)


Lesenswert?

Maxx schrieb:
> npn schrieb:
>> Und mit dem Windows-Rechner auch.
>
> Drück mal ALT+3 und versuch es nochmal.

Tom hat nirgendwo auch nur eine Andeutung gemacht, daß er mit Ganzzahlen 
rechnet:
Tom schrieb:
> ich will das x=80 ist
> aber irgendwie scheint hier was anderes herauszukommen..was mache ich
> falsch?
>
> x:=315-((235/120)*120);

von M.A. S. (mse2)


Lesenswert?

npn schrieb:
> Tom hat nirgendwo auch nur eine Andeutung gemacht, daß er mit Ganzzahlen
> rechnet:
Eben.
Er schreibt, wie so viele so oft, nicht, was hier die Voraussetzungen 
sind.
Eindeutig beantwortbar wäre die Frage gewesen, wenn er geschrieben 
hätte:
Plattform xy, programmiert mit der Sprache abc, compiliert mit dem 
Compiler def, mit folgenden Directiven....
Aber nee: er haut uns zusammenhanglos einfach eine Gleichung hin.
Mit dem, was gegeben ist, lautet die Antwort: da kommt 80 heraus.

(Vielleicht lautet die Antwort aber auch 42 und der TO weiß nur nicht, 
wie eigentlich die Frage lautet...)

von Max (Gast)


Lesenswert?

lol....so schlau weider wie alle sind..wenn ich genau wüßte worauf es 
akommt, dann wüßte ich wohl auch woean es liegt...wieder einer schlauer 
als der andere hier...
mit Float geht es jetzt jedenfalls..damit ist das Problem 
erledigt...schönen Abend noch

von npn (Gast)


Lesenswert?

Max schrieb:
> lol....so schlau weider wie alle sind..wenn ich genau wüßte worauf
> es
> akommt, dann wüßte ich wohl auch woean es liegt...wieder einer schlauer
> als der andere hier...
> mit Float geht es jetzt jedenfalls..damit ist das Problem
> erledigt...schönen Abend noch

Und was sagt Tom dazu?

von Max (Gast)


Lesenswert?

max = tom <> birgit :-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Max schrieb:
> wenn ich genau wüßte worauf es akommt, dann wüßte ich wohl auch woean es
> liegt...
Und warum sagst du nicht einfach, mit WAS und WORAUF du solche 
Rechenergebnisse ermittelst?

Tom schrieb:
> was mache ich falsch?
Du teilst uns nötige Rahmenbedingungen nicht mit. Oder soll man da 
treffsicher erraten, wie du zu diesem falschen Ergebnis kommst?

Max schrieb:
> mit Float geht es jetzt jedenfalls..damit ist das Problem erledigt...
Dir ist schon klar, dass bei bestimmten Rechnerarchitekturen (t.B. 
kleine 8 Bit uC) ein float ganz hübsch Ressourcen braucht und langsam 
ist?


Und, Tom und Max: Nutzungsbedingungen des Forums beachten!
https://www.mikrocontroller.net/user/conditions

: Bearbeitet durch Moderator
von Guest (Gast)


Lesenswert?

und wieder lassen sich alle von einem Troll mit vielen Namen verarschen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Er hat nur 2 Namen, und das Problem ist so alltäglich und glaubwürdig, 
dass ich nicht meine, Tommax wäre ein echter Troll.

von Salewski, Stefan (Gast)


Lesenswert?

Lothar M. schrieb:
> dass ich nicht meine, Tommax wäre ein echter Troll.

Magst Du Dir wirklich vorstellen, dass es Leute gibt, die eine echte 
Frage so wie oben formulieren würden? Also mir ist da ein Troll wirklich 
lieber.

von Mark L. (Gast)


Lesenswert?

Max schrieb:
> lol....so schlau weider wie alle sind..wenn ich genau wüßte worauf es
> akommt, dann wüßte ich wohl auch woean es liegt...wieder einer schlauer
> als der andere hier...
> mit Float geht es jetzt jedenfalls..damit ist das Problem
> erledigt...schönen Abend noch

Also die einzige verbleibende Frage ist dann, ob Tom-Max ein Troll oder 
Arschloch ist.

von Nothing Toulouse (Gast)


Lesenswert?

Mark L. schrieb:
> Also die einzige verbleibende Frage ist dann, ob Tom-Max ein Troll oder
> Arschloch ist.

Er hat den zitierten Text offenbar voller Ärger geschrieben. Soll ich 
Dir was sagen?

Nach den wirklich saublöden Antworten kann ich das verstehen. Es gibt 
eben nur 2 Möglichkeiten: Kommentarlos herunterschlucken oder mit 
gleicher Münze zurückzahlen. Viele bringen das Herunterschlucken nicht 
fertig...

von M.A. S. (mse2)


Lesenswert?

Nothing Toulouse schrieb:
> Nach den wirklich saublöden Antworten kann ich das verstehen.
Darf ich diese Zeile so verstehen, dass Du die Fragestellung völlig in 
Ordnung findest?

Für mich klingt das wie:
"Ich möchte, dass die Farbe = lila ist, ich kriege aber rosa raus.
 Ich mache blau und rot und raus kommt rosa. Was mache ich falsch?"

Woher soll das Forum nun wissen, ob ich versuche, meine Wand rosa zu 
steichen und dazu Farben in einem Eimer mische
oder
ob ich einen bunten Lichteffekt durch Anstrahlen einer Wand mit farbigen 
Scheinwerfern erzeugen will
oder (und das ist es, was ich tatsächlich machen will aber das kann man 
ja sicher erraten, denn das ist ja offensichtlich das naheliegendste)
ob ich lilafarbene Schweine züchten will?!!!!?

von Nothing Toulouse (Gast)


Lesenswert?

>> Nach den wirklich saublöden Antworten kann ich das verstehen.

Michael S. schrieb:

> Darf ich diese Zeile so verstehen, dass Du die Fragestellung völlig in
> Ordnung findest?

Völlig.

Michael S. schrieb:
> Für mich klingt das wie:
> "Ich möchte, dass die Farbe = lila ist, ich kriege aber rosa raus.
>  Ich mache blau und rot und raus kommt rosa. Was mache ich falsch?"

Dann stellst Du Dich absichtlich blöd. Warum?

Fakt ist: Bei einer Gleichung kommt nicht das erwartete Ergebnis heraus.
Woran kann das liegen?
-> Die Regeln wurden nicht beachtet (z.B.Punkt vor Strich)
-> Beim Umstellen der Formel wurde ein Fehler gemacht
-> Wenn ein Programm für das falsche Ergebnis "verantwortlich" ist, dann 
waren Datentypen falsch gewählt.

Da sind keine lilafarbenen Schweine. Da braucht man auch keine Wände 
anzustrahlen.

-> Wer einen solchen Haufen Scheiße zur Antwort gibt, will den 
Fragesteller provozieren. Darauf gibt es dann die entsprechende Antwort.

von M.A. S. (mse2)


Lesenswert?

Nothing Toulouse schrieb:
> Michael S. schrieb:
>> Darf ich diese Zeile so verstehen, dass Du die Fragestellung völlig in
>> Ordnung findest?
> Völlig.
Du darfst denken was Du willst. Ich aber auch!

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.