Announcement

Collapse
No announcement yet.

Ganzzahlige Division richtig runden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ganzzahlige Division richtig runden

    Hallo, <br>

    wie kann man __int64 Variablen so dividieren, <br>
    dass man ein richtig gerundetes Ergebnis erhält? <br>

    MfG JB

  • #2
    Also, falls die Division nicht extrem schnell berechnet werden soll, hab ich eine rein mathematische Lösung für Dich.

    Also (a und b sind zwei Beispielwerte, r das Zwischenergebnis und e das Ergebnis):

    __int64 a, b, r, e;

    a = 100; b = 6;
    r = a / b;
    if ((( r + 1 ) * b - a ) < ( a - ( r * b )))
    {
    e = r + 1;
    }
    else
    {
    e = r;

    Comment


    • #3
      oder

      double r; <br>
      int n; <br>

      r = 100/6;<br>
      // runden<br>
      r += 0.5;<br>
      n = r;<br>

      Gruß<br>
      Thoma

      Comment


      • #4
        Geht auch ohne Zwischenergebnis mit cast

        int n;

        n = ((double)100/6)+0.5;

        Gruss Pete

        Comment


        • #5
          Bei Integer ist besser:

          Für alle, die wie ich zufällig über diese "alte" Thema gestolpert sind:


          /** Division mit Rundung ganzzahliger Zahlen mit ganzzahligem Ergebnis
          ***
          *** Da die Division das Ergebnis bei ganzen Zahlen abschneidet muss 0.5 zum Ergebnis hinzugezählt werden.
          *** Um interne Casts auf double oder float zu vermeiden wird hier ein Trick angewandt:
          *** Die Hälfte des Divisors wird zum Dividend hinzugezählt.
          *** Um eine schnelle Performance zu erzielen wird beim Halbieren ein Rightshift verwendet.
          ***
          *** @return Quotient
          **/
          unsigned int DivideRounded(unsigned int a, unsigned int b) {

          if ((a == 0) || (b == 0)) {
          return 0;
          }
          return ((a+(b>>1))/b);
          }


          MFG,
          Alex
          Zuletzt editiert von TrickTronic; 18.10.2007, 11:58.

          Comment

          Working...
          X