Forum: PC-Programmierung Streichung der Nachkommastellen mathematisch ausdrücken


von Karl (Gast)


Lesenswert?

Hallo,

ich habe folgende Anweisung:
1
N = int((L/l + 0.5))

Wie kann ich das in "mathematischer Schreibweise" ausdrücken?

von foobar (Gast)


Lesenswert?

N = ⌊L/l + 0.5⌋

von g457 (Gast)


Lesenswert?

⌊L/l + 0.5⌋

von Karl (Gast)


Lesenswert?

Danke

Beitrag #6120432 wurde von einem Moderator gelöscht.
Beitrag #6120452 wurde von einem Moderator gelöscht.
Beitrag #6120460 wurde von einem Moderator gelöscht.
Beitrag #6120471 wurde von einem Moderator gelöscht.
Beitrag #6120488 wurde von einem Moderator gelöscht.
Beitrag #6120521 wurde von einem Moderator gelöscht.
Beitrag #6120555 wurde von einem Moderator gelöscht.
Beitrag #6120559 wurde vom Autor gelöscht.
von DPA (Gast)


Lesenswert?

Alternativ:

x - (x mod b^-k)

Mit wert x, basis b, anzahl nachkommastellen k.

von Korn (Gast)


Lesenswert?

Abi88, LK Mathe, und diese Schreibweise auch noch nie gesehen.
Google frisst diese Schreibweise auch im Jahre 2020 nicht.

Dieses prinzipielle Konstrukt frisst Google (von den Variablen mal 
abgesehen):
(L/l)-(L/l mod1)+(L/l mod1 +0,5)-(L/l mod1 +0,5) mod1

Beitrag #6120589 wurde von einem Moderator gelöscht.
Beitrag #6120591 wurde von einem Moderator gelöscht.
Beitrag #6120594 wurde von einem Moderator gelöscht.
von Rolf M. (rmagnus)


Lesenswert?

Du meinst, weil die alle wissen, wie die mathematische Schreibweise für 
das Runden aussieht?
Übrigens ist die angegebene Formel falsch, da sie für negative Werte von 
L/l nicht mit dem C-Code übereinstimmt. Die Gaußklammer rundet immer ab, 
während die Konvertierung nach int einfach nur den Nachkommateil 
abschneidet.
Allerdings scheint auch der C-Code schon für negative Werte fehlerhaft 
zu sein, wenn seine Aufgabe sein sollte, zum nächsten ganzzahligen Wert 
hin zu runden.

: Bearbeitet durch User
Beitrag #6120643 wurde von einem Moderator gelöscht.
von georg (Gast)


Lesenswert?

Schon die Frage ist falsch: Streichung der Nachkommastellen ist etwas 
anderes als runden.

Georg

von Rolf M. (rmagnus)


Lesenswert?

georg schrieb:
> Schon die Frage ist falsch: Streichung der Nachkommastellen ist etwas
> anderes als runden.

Wer genau hinsieht, bemerkt aber ein "+ 0.5", das daraus eine Rundung 
macht,  aber eben nur für positive Zahlen.

von Karl (Gast)


Lesenswert?

Rolf M. schrieb:
> Übrigens ist die angegebene Formel falsch, da sie für negative Werte von
> L/l nicht mit dem C-Code übereinstimmt.

Nein, die angegebene Formel ist richtig, deine Annahmen sind nur falsch.
a) es ist kein C-Code
b) L und l sind Längen. Damit ist die Diskussion über negative Werte für 
beendet erklärt!

Rolf M. schrieb:
> Allerdings scheint auch der C-Code schon für negative Werte fehlerhaft
> zu sein, wenn seine Aufgabe sein sollte, zum nächsten ganzzahligen Wert
> hin zu runden.

Das sollte nicht die Aufgabe sein, wenn ich den nächsten ganzzahligen 
Wert wollte, hätte ich round() verwendet.

georg schrieb:
> Schon die Frage ist falsch: Streichung der Nachkommastellen ist etwas
> anderes als runden.

Die Frage ist richtig. Ich möchte die Nachkommastelle gestrichen habe, 
von runden war keine rede.

Rolf M. schrieb:
> Wer genau hinsieht, bemerkt aber ein "+ 0.5", das daraus eine Rundung
> macht,  aber eben nur für positive Zahlen.

Die Zahl 0,5 ist willkürlich, hätte auch 0,6 sein können.

von Rolf M. (rmagnus)


Lesenswert?

Karl schrieb:
> Rolf M. schrieb:
>> Übrigens ist die angegebene Formel falsch, da sie für negative Werte von
>> L/l nicht mit dem C-Code übereinstimmt.
>
> Nein, die angegebene Formel ist richtig, deine Annahmen sind nur falsch.

Die Formel ist nicht allgemein äquivalent zum Code. Dass du keine 
negativen Werte hast, ändert nichts daran.

> a) es ist kein C-Code

Ok, hatte ich implizit angenommen. Lag auch daran, dass du vergessen 
hast, die Sprache anzugeben. Es ist etwas ungeschickt, wenn man einen 
Sprachkonstrukt zur Diskussion stellt, aber die Sprache nicht mit 
angibt. Mir wäre allerdings auch keine Sprache bekannt, wo int 
vorzeichenlos ist.

> b) L und l sind Längen. Damit ist die Diskussion über negative Werte für
> beendet erklärt!

Du hattest nach einem Äquivalent gefragt. Ich hab angemerkt, dass es das 
nicht ist, weil bei negativen Werten das Ergebnis abweicht. Wenn dich 
das nicht stört, ist das ja ok. Dass keine negativen Werte vorkommen 
können, hattest du nicht erwähnt.

> Rolf M. schrieb:
>> Wer genau hinsieht, bemerkt aber ein "+ 0.5", das daraus eine Rundung
>> macht,  aber eben nur für positive Zahlen.
>
> Die Zahl 0,5 ist willkürlich, hätte auch 0,6 sein können.

Wozu hast du sie dann überhaupt hingeschrieben? Zur allgemeinen 
Verwirrung? Klar, ich hab fälschlicherweise angenommen, das solle eine 
Rundung sein, aber wenn du einen float-Wert + 0,5 nimmst und dann nach 
int konvertierst, sieht das schon sehr danach aus.

von Percy N. (vox_bovi)


Lesenswert?

Karl schrieb:

>
> Die Zahl 0,5 ist willkürlich, hätte auch 0,6 sein können.

Oder auch pi*e, wir leben schließlich in einem freien Land!

Es bleibt allerdings fraglich,  was die Operation bezwecken soll.

von Jemand (Gast)


Lesenswert?

Mag mir jemand erklären, warum das Streichen der Nachkommastellen auf 
einmal kein Rundungsverfahren mehr ist?

von sid (Gast)


Lesenswert?

Jemand schrieb:
> Mag mir jemand erklären, warum das Streichen der Nachkommastellen auf
> einmal kein Rundungsverfahren mehr ist?

Naja ganz einfach..
wenn man "runden" sagt, geht der Leser von symmetrischem runden aus,
dass man 1.5 nach 2 rundet und 1.4 nach 1 vereinfacht ausgedrückt.
also *round(1.5)*
Streichung der Nachkommastellen ist aber ABrunden
1.99 wird zu 1
quasi *floor(1.99)*
im Gegensatz zu *ceil(1.02)*
was schon zu 2 als Resultat führen würde

also:  floor( x ) oder in gaussklammern notation: ⌊ x ⌋
oder:  ceil( x ) oder in gaussklammern notation:  ⌈ x ⌉
ist was anderes als symmetrisches runden
round( x ) oder eben  [ x ] (nein keine eckigen Klammern)
manche bevorzugen wegen der konfusion deswegen auch ⌊ x ⌉ stattdessen
für's symmetrische runden

ich schweife ab...

von Rolf M. (rmagnus)


Lesenswert?

sid schrieb:
> Naja ganz einfach..
> wenn man "runden" sagt, geht der Leser von symmetrischem runden aus,
> dass man 1.5 nach 2 rundet und 1.4 nach 1 vereinfacht ausgedrückt.
> also *round(1.5)*
> Streichung der Nachkommastellen ist aber ABrunden

Oder aufrunden - falls der Wert negativ ist.
Manchmal wird die Art der Rundung auch über einen Wert beschrieben, in 
dessen Richtung das Ergebnis geht.
Das Abschneiden der Nachkomma-Stellen heißt dann runden gegen Null, das 
Aufrufen heißt runden gegen positive Unendlichkeit, das abrunden analog 
dazu, und das symmetrische Runden als runden gegen die nächste Ganzzahl.
Zumindest im englischsprachigen Raum scheint das verbreitet zu sein.

von Percy N. (vox_bovi)


Lesenswert?

Rolf M. schrieb:

> Zumindest im englischsprachigen Raum scheint das verbreitet zu sein.

Das ist hier zu Lande nicht wesentlich anders; nur ist insbesondere bei 
Journalisten die Unsitte verbreitet, unreflektiert einheitlich von 
aufrunden zu sprechen, unabhängig davon, welche Rundungsart gerade 
gemeint ist. Dito für "abrunden".

von dadida (Gast)


Lesenswert?

Es gibt auch noch kaufmännisches Runden (Rundung zu nächsten geraden 
Zahl; macht mir zumindest Kopfschmerzen). Verwendet in .NET und LabView
https://stackoverflow.com/questions/311696/why-does-net-use-bankers-rounding-as-default

von Percy N. (vox_bovi)


Lesenswert?

dadida schrieb:
> Es gibt auch noch kaufmännisches Runden (Rundung zu nächsten geraden
> Zahl; macht mir zumindest Kopfschmerzen). Verwendet in .NET und LabView
> 
https://stackoverflow.com/questions/311696/why-does-net-use-bankers-rounding-as-default

Nein, kaufmännisch Runden ist 5up-4-down, jeweils down Richtung Null.

Next-or-even bringt angeblich eine bessere Verteilung, wenn man über 
eine größere Anzahl Rundungen mitteilt.

von Jens M. (schuchkleisser)


Lesenswert?

Bankers Rounding != Kaufmännisches Runden

von Percy N. (vox_bovi)


Lesenswert?

Jens M. schrieb:
> Bankers Rounding != Kaufmännisches Runden

Außerdem hat er das Prinzip falsch verstanden. Es wird zur nächsten Zahl 
gerundet, nur wenn die letzte Stelle eine 5 ist zum geraden Nachbarn.

Instruktiv:

https://people.cs.nctu.edu.tw/~tsaiwn/sisc/runtime_error_200_div_by_0/www.merlyn.demon.co.uk/pas-chop.htm

: Bearbeitet durch User
von dadida (Gast)


Lesenswert?

Jens M. schrieb:
> Bankers Rounding != Kaufmännisches Runden

Danke. Erklärt meine Kopfschmerzen...

von georg (Gast)


Lesenswert?

Für mich bedeutet "Streichung der Nachkommastellen" dass alles von 5,1 
bis 5,9 zu 5 wird. Eben einfach gestrichen oder abgeschnitten.

Aber zugegeben, Streichung ist keine wirklich mathematische 
Ausdrucksweise, da kann man natürlich drunter verstehen was man will. 
Meinetwegen auch wie der TO eine beliebige Zahl vorher dazuaddieren. Als 
Mathematiker muss ich ja nicht verstehen was das soll.

Georg

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.