Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++ Welcher Befehl rundet wie "Round" in Borland C++ ? (https://www.delphipraxis.net/156127-welcher-befehl-rundet-wie-round-borland-c.html)

himitsu 22. Nov 2010 10:18

AW: Welcher Befehl rundet wie "Round" in Borland C++ ?
 
Zitat:

Zitat von Satty67 (Beitrag 1063205)
Zitat:

Zitat von Valle (Beitrag 1063053)
wie wäre es, wenn du uns mal mitteilst, wie genau gerundet werden soll?

Wurde schon mehrmals beantwortet... genauso runden wie die Delphi Funktion Round() rundet ;)

Zitat:

Zitat von gammatester (Beitrag 1063207)
Nicht ganz: round(8.5) = 8 aber ceil(8.5+0.5) = 9.

Genau und das sagte ich ja schon.

Das Round vom Delphi (also renauer die Recheneinheit des PCs) rundet so wie es die Banken machen.
Code:
Round(0,49) = 0
Round(0,50) = 0 v
Round(0,51) = 1
Round(1,49) = 1
Round(1,50) = 2 ^
Round(1,51) = 2
Round(2,49) = 2
Round(2,50) = 2 v
Round(2,51) = 3
Round(3,49) = 3
Round(3,50) = 4 ^
Round(3,51) = 4
Round(4,49) = 4
Round(4,50) = 4 v
Round(4,51) = 5
Das soll irgendwie gerechter sein, da, wenn man mit einer festen Anzahl an Nachkommastellen arbeitet, sonst mehr auf als abgerundet wird.
Denn es gibt eine ungerade Anzahl an Werten. (ab 0.5 Einer mehr)

mathematisches Runden
abdunden: 0.1 0.2 0.3 0.4
aufrunden: 0.5 0.6 0.7 0.8 0.9
nicht runden: 0.0

dieses Banken-Runden
abdunden: 0.1 0.2 0.3 0.4
im wechsel auf oder ab: 0.5
aufrunden: 0.6 0.7 0.8 0.9
nicht runden: 0.0

Satty67 22. Nov 2010 11:14

AW: Welcher Befehl rundet wie "Round" in Borland C++ ?
 
Ist mir noch gar nicht aufgefallen (hätte die Werte besser zweimal nacheinander ausgeben lassen). Wie wird gewechselt bzw. wo wird der letzte Wechsel ob auf oder ab gespeichert?

Wäre in dem Fall ja schwer bis gar nicht vorhersagbar, ob ein Round nun gerade auf oder abrundet. Man kann in der C++ DLL ja nicht vorhersehen, wie die Zahl beim nächsten mal von Delphi behandelt wird.

€: Der Wechsel ist wohl auf einen Funktions-Block beschränkt. Neuer Block, immer erst mal aufrunden. Ist aber dann fast einfacher, für Delphi und C++ eine mathematische Version zu verwenden, statt zu versuchen, das in C++ zu raten?

€2: Also runden wie in Delphi nachbauen OK. Runden wie Delphi den gleichen Datenbestand runden wird/würde, schwer bis unmöglich.

himitsu 22. Nov 2010 12:03

AW: Welcher Befehl rundet wie "Round" in Borland C++ ?
 
Es ist schon vorhersehbar.

gerade Zahl vor dem Komma > 0.5 abrunden
ungerade Zahl vor dem Komma > 0.5 aufrunden

(also bei den positiven Zahlen ... negative wird es ähnlich sein, hab'sch jetzt aber noch nicht nachgesehn)

madina 22. Nov 2010 13:29

AW: Welcher Befehl rundet wie "Round" in Borland C++ ?
 
Hallo,

wie genau gerundet werden soll?

es sollte auf maximal 2 Vorkomma wie Delphi.Round() in Borland C++ 5.01 gerundet werden.

MFG

Luckie 22. Nov 2010 14:03

AW: Welcher Befehl rundet wie "Round" in Borland C++ ?
 
Zitat:

Zitat von madina (Beitrag 1063276)
es sollte auf maximal 2 Vorkomma wie Delphi.Round() in Borland C++ 5.01 gerundet werden.

Kann es sein, das in dem Satz ein Wort oder so fehlt? So ist er für mich unverständlich. Und was soll das jetzt mit den Vorkomma(stellen)?

Satty67 22. Nov 2010 14:11

AW: Welcher Befehl rundet wie "Round" in Borland C++ ?
 
Zitat:

Zitat von himitsu (Beitrag 1063256)
gerade Zahl vor dem Komma > 0.5 abrunden
ungerade Zahl vor dem Komma > 0.5 aufrunden

Das sollte dann ja machbar sein. So ganz banal mit MOD 2 prüfen und dann ensprechen .4 oder .5 addieren und je nach Vorzeichen floor oder ceil oder gleich modf.

madina 22. Nov 2010 15:49

AW: Welcher Befehl rundet wie "Round" in Borland C++ ?
 
Hallo,

machen wir's einfach.

1. Wie funktioniert Delphi.Round(); (was steckt dahinter) um dies in BorlandC++.Fkt() umzuschreiben ?

2. Bitte um Beispiele mit Sourcecode

MFG

gammatester 22. Nov 2010 16:05

AW: Welcher Befehl rundet wie "Round" in Borland C++ ?
 
Zitat:

Zitat von madina (Beitrag 1063308)
1. Wie funktioniert Delphi.Round(); (was steckt dahinter) um dies in BorlandC++.Fkt() umzuschreiben ?

round rundet zum nächste Integer unter Verwendung des eingestellten Rundungsmodus. Standard-C hat dafür
Code:
int lrint(double x);
Allerdings scheint BorlandC++ genauso wenig Standard, wie Delphi Standard-Pascal ist.
Zitat:

Zitat von madina (Beitrag 1063308)
2. Bitte um Beispiele mit Sourcecode

Hier notfalls ein Round-To-Even:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

long int roundtoeven(double x) {
  double y;
  long l;
  y = 2.0*x;
  if (floor(y)==y) {
    l = (long) y;
    if ((l & 3) == 3) l++;
    l = l >> 1;
  }
  else {
    l = floor(x+0.5);
  }
  return l;
}


int main (void) {
  double x;
  long int l,i;

  for (i=-50;i<=100;i++) {
    x = 0.1*i;
    l = roundtoeven(x);
    printf("%f %d\n", x, l);
  }

  return 0;
}

madina 22. Nov 2010 18:13

AW: Welcher Befehl rundet wie "Round" in Borland C++ ?
 
Hallo,

vielen Dank dies ist die Lösung:

roundtoeven(double x);

MFG


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz