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.


Anmelden zum Antworten