Hat der gute alte Knuth ne Macke??



  • Wieso bitte rechnet der MMIX
    -8 / 10 = -1 ?!

    Und ratet mal, wer hier stundenlang seine IntToString-Funktion debuggt?!

    Ernsthafte Frage: Was kann man mit so einer Division anfangen?



  • da wurde halt gerundet ...



  • Ja echt? *staun* Darauf w├Ąre ich nicht gekommen. ­čś«



  • Doofie ­čÖä



  • Ja, wieso nicht? Dann ist -8 % 10 = 2, und alles passt wieder.



  • Ja und warum ist das so? Macht das die Division besser? Mir f├Ąllt kein Vorteil ein. Au├čerdem finde ich es ... ungew├Âhnlich ... wenn ich eine Zahl solange durch 10 teilen will, bis sie 0 ist und das aber nie zustande kommt.

    Mich w├╝rde ja mal interressieren, was das bringt, so zu rechnen.



  • Optimizer schrieb:

    Ja und warum ist das so? Macht das die Division besser? Mir f├Ąllt kein Vorteil ein. Au├čerdem finde ich es ... ungew├Âhnlich ... wenn ich eine Zahl solange durch 10 teilen will, bis sie 0 ist und das aber nie zustande kommt.

    Mich w├╝rde ja mal interressieren, was das bringt, so zu rechnen.

    Was ist daran ungew├Âhnlich? Das wird nunmal nie 0, da kannst du noch so oft teilen.



  • Das ist keine Antwort auf meine Frage. Warum das nie 0 wird, ist mir selber klar.



  • Was willst du denn ├╝berhaupt? -0,8 kann ja schlecht rauskommen wenn du nen Integer hast. Also muss gerundet werden. ­čśĽ



  • @noebef

    #include <stdio.h>
    
    int main() {
      printf("%d\n",-8/10);
      return 0;
    }
    

    was gibt das aus?



  • Wer sagt, dass MMIX sich genauso verhalten muss wie C?



  • Optimizer schrieb:

    Ja und warum ist das so? Macht das die Division besser? Mir f├Ąllt kein Vorteil ein. Au├čerdem finde ich es ... ungew├Âhnlich ... wenn ich eine Zahl solange durch 10 teilen will, bis sie 0 ist und das aber nie zustande kommt.

    ich finde es ungew├Âhlich, DASS jemand ne neagtive zahl so lange teilen m├Âchte, bis sie 0 ist.
    ich kenne es so, da├č man zuerst das vorzeichen kl├Ąrt
    if(x<0)
    x=-x,putch(-);
    und dann die funktion f├╝r signed int benutzt



  • noebef schrieb:

    Was willst du denn ├╝berhaupt? -0,8 kann ja schlecht rauskommen wenn du nen Integer hast. Also muss gerundet werden. ­čśĽ

    Wow, bist du schlau. ­čÖä

    @volkard: Ich musste ein Programm schreiben, dass eine Zahl in einen String umwandelt. Ich teile also immer durch 10 und der Wert im Restregister ist die n├Ąchste Dezimalstelle (von hinten). Das geht so lange, bis nach der Division 0 rauskommt. Und jetzt habe ich mich nat├╝rlich gewundert, dass er bei negativen Zahlen nie zu einem Ergebnis kommt sondern endlos weiterrechnet. ÔÜá
    Also sch├Ân ne Stunde lang debuggt und schlie├člich festgestellt: -8 / 10 = -1

    Jetzt hab ich halt erst das Vorzeichen bestimmt und rechne mit dem Betrag weiter (so wie ich deinen Post auch verstanden habe). Trotzdem frage ich mich, was f├╝r einen Vorteil das hat, die Division so zu definieren. Mir erscheint es nicht logisch, dass sich negative Zahlen anders verhalten als positive und selbst durch endlose Divisionen nie 0 werden. Hat das in der Praxis auch irgendeinen Vorteil??

    SG1 schrieb:

    Wer sagt, dass MMIX sich genauso verhalten muss wie C?

    Wenn es irgendnen Sinn macht, sich anders zu verhalten... aber was ist der Sinn in diesem Fall? Das war ja meine Frage...



  • SG1 schrieb:

    Wer sagt, dass MMIX sich genauso verhalten muss wie C?

    F├╝r C und C++ ist das Ergebnis von -8 / 10 "implementation defined".
    In sch├Ânen Worten (aus der MSDN):

    If either operand is negative, whether the result of the operation is the largest integer less than or equal to the algebraic quotient or is the smallest integer greater than or equal to the algebraic quotient is implementation defined.

    Warum das so ist und was die Vor- und Nachteile sind, kann man in unz├Ąhligen Threads in comp.std.c++ bzw. comp.lang.c++.moderated bzw. in entsprechenden C-Newsgroups nachlesen.


Log in to reply