Difference between revisions of "Round/de"

From Free Pascal wiki
(Banker-Runden)
(Überarbeitet und mit weiteren Informationen angereichert.)
Line 1: Line 1:
{{Round}}
+
{{Translate}}
  
 
Rundet eine Fliesskommazahl auf eine Ganzzahl.
 
Rundet eine Fliesskommazahl auf eine Ganzzahl.
  
 
=Round=
 
=Round=
==Deklaration:==
+
==Deklaration==
 
<syntaxhighlight>function Round(X: Real): Longint;</syntaxhighlight>
 
<syntaxhighlight>function Round(X: Real): Longint;</syntaxhighlight>
  
==Beispiel:==
+
==Beispiel==
===Code:===
+
===Code===
 
<syntaxhighlight>
 
<syntaxhighlight>
 
var
 
var
Line 26: Line 26:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
===Ausgabe:===
+
===Ausgabe===
 
<pre>
 
<pre>
 
9
 
9
Line 37: Line 37:
  
 
==Banker-Runden==
 
==Banker-Runden==
Dank des Banker-Runden ist die Wahrscheinlichkeit für Auf- und Ab- runden  bei Zufallszahlen exakt 50:50.  
+
Die Funktion [[Round]] verwendet das Banker-Runden und rundet daher bei 0,5 zur nächsten geraden Zahl. Daher ist die Wahrscheinlichkeit für Auf- und Ab- runden  bei Zufallszahlen exakt 50:50.
  
Hierdurch zeichnet folgendes Beispiel keine durchgehende Linie, sondern eine Gepunktete.
+
Es eignet sich sehr gut für statistische oder finanzmathematische Anwendungen. Bei grafischen Anwendungen &ndash; zum Beispiel beim Zeichnen von Bildern &ndash; ist das nicht immer von Vorteil. Hierdurch zeichnet folgendes Beispiel keine durchgehende Linie, sondern eine Gepunktete.
 
===Code:===
 
===Code:===
 
<syntaxhighlight>
 
<syntaxhighlight>
Line 53: Line 53:
 
end;  
 
end;  
 
</syntaxhighlight>
 
</syntaxhighlight>
Als Alternative [[Trunc]] verwenden.
 
  
===Ausgabe:===
+
===Ausgabe===
 
<pre>
 
<pre>
 
Input:    0.50 round:    0
 
Input:    0.50 round:    0
Line 64: Line 63:
 
....
 
....
 
</pre>
 
</pre>
 +
 +
==Alternativen==
 +
Zum Abrunden kann [[Trunc]] verwenden werden.
 +
 +
Mit der Prozedur [[doc:rtl/math/setroundmode.html|SetRoundMode]] aus der Unit [[Math]] kann der Rundungsmodus für alle folgenden Aufrufe von Round() eingestellt werden.
 +
 +
An [http://bugs.freepascal.org/view.php?id=12687 Bug Report 12687] hat John Herbster eine Unit mit weiteren Rundungsalgorithmen angehangen.
  
  
See also:
+
==Siehe auch==
 
* [[Int]]
 
* [[Int]]
 
* [[Trunc]]
 
* [[Trunc]]
 
* [[Div]]
 
* [[Div]]
 +
* [[User Changes 2.2.4#Floating_point_rounding Änderungen in FPC 2.2.4]] Fehlerkorrekur für nicht-x86 und nicht-linux/ppc64 Systeme
  
 
[[Category:Pascal/de]]
 
[[Category:Pascal/de]]

Revision as of 11:53, 30 May 2018

Template:Translate

Rundet eine Fliesskommazahl auf eine Ganzzahl.

Round

Deklaration

function Round(X: Real): Longint;

Beispiel

Code

var
  i1, i2: Integer;
begin
  WriteLn( Round(8.7) );
  WriteLn( Round(8.3) );
  // Beispiele für "Banker-Runden" - .5 wird auf die nächste gerade Zahl eingestellt
  WriteLn( Round(2.5) );
  WriteLn( Round(3.5) );

  i := Round(12.50); // Rundet ab
  WriteLn(i);
  i := Round(12.51); // Rundet auf
  WriteLn(i);
end.

Ausgabe

9
8
2
4
1
13

Banker-Runden

Die Funktion Round verwendet das Banker-Runden und rundet daher bei 0,5 zur nächsten geraden Zahl. Daher ist die Wahrscheinlichkeit für Auf- und Ab- runden bei Zufallszahlen exakt 50:50.

Es eignet sich sehr gut für statistische oder finanzmathematische Anwendungen. Bei grafischen Anwendungen – zum Beispiel beim Zeichnen von Bildern – ist das nicht immer von Vorteil. Hierdurch zeichnet folgendes Beispiel keine durchgehende Linie, sondern eine Gepunktete.

Code:

var
  i: integer;
  x: single = 0.5;
begin
  for i := 0 to 99 do begin
    Canvas.Pixels[round(x), 20]:= $00;
    WriteLn('Input:', x: 6: 2, ' round: ', Round(x): 4);
    x := x + 1.0;
  end;
end;

Ausgabe

Input:    0.50 round:    0
Input:    1.50 round:    2
Input:    2.50 round:    2
Input:    3.50 round:    4
Input:    4.50 round:    4
....

Alternativen

Zum Abrunden kann Trunc verwenden werden.

Mit der Prozedur SetRoundMode aus der Unit Math kann der Rundungsmodus für alle folgenden Aufrufe von Round() eingestellt werden.

An Bug Report 12687 hat John Herbster eine Unit mit weiteren Rundungsalgorithmen angehangen.


Siehe auch