Announcement

Collapse
No announcement yet.

Durch 0 teilen erlaubt?

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

  • Durch 0 teilen erlaubt?

    Hallo, ich habe mal eine Frage: Wieso kann man durch 0 teilen:
    [highlight=VBNet]Dim i As Double = (3 / 0)
    MsgBox(i)[/highlight]Wieso löst das keine Exception aus, sondern es kommt die Meldung: "+unendlich"?
    Zuletzt editiert von levu; 21.10.2008, 17:11.

  • #2
    eigentlich sollte es für den geteilt durch Null eine eigene Exception geben. Hab ich erst letztens wieder gelesen. Sollte eigentlich eine DivideByZeroException ausgelöst werden.
    Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

    Comment


    • #3
      Hi,

      das ist in der Norm IEC 60559:1989 (IEEE 754) so geregelt.

      Es kann aber mit IsPositiveInfinity geprüft werden.

      mfG Gü
      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

      Comment


      • #4
        Hab es gerade nochmal ausprobiert. Scheint so zu sein wie gfoidl sagt. Benutzt man jedoch die Funktionen aus dem System.Math Namespace so werden die Exceptions ausgelöst. Nur nochmal der Vollständigkeit halber.
        Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

        Comment


        • #5
          komisch... aber danke!

          Comment


          • #6
            Ob und wie Exceptions ausgelöst werden hängt z.B. auch von der gesetzten Coprozessor-Exceptionmaske ab. Divese DirectX-Komponenten setzen die so das DivByZero keine Exception auslöst. Auch manche (Drucker-)Treiber setzen die AFAIK Systemweit

            Comment


            • #7
              das heißt dann doch auch, dass mal eine exception auftritt, mal nicht? kann man nicht durch irgendwelche .NET - optionen das einstellen, damit es wenigstens immer einheitlich ist?

              Comment


              • #8
                Hi,

                mir ist nichts bekannt dass sich das irgendwo einstellen lässt (auch nicht in der machine.config), da sich Mircosoft hier fest auf den IEEE 754-Standard stützt.

                Das einzige was bleibt für die eigenen Programme eine einheitliche Linie zu fahren. D.h. entweder mit +Inf arbeiten oder auf dies Prüfen und eine Fehler werfen.

                mfG Gü
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment


                • #9
                  kann man eine art globale Operatorüberladung machen, die immer ausnahmen wirft, also selber eine Funktion schreiben und diese statt der Compiler-Standardmethoden zu benutzen oder geht das nicht mit / und \ bzw. ohne eigenen Datentyp?

                  Comment


                  • #10
                    Du könntest den IL-Code der .net Assemblys ändern -> geht mit zB mit Reflexil.
                    Würde ich aber nicht tun.
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment


                    • #11
                      kann man eigentlich selber datentypen definieren oder nur klassen / Strukturen? wenn ja würde ich einfach selber mir einen DatenType "ForceDivideByZeroExceptionInt" oder so machen.

                      Comment


                      • #12
                        Sicher geht das ein Datentyp erbt auch nur von Objekt (wie alles in .net) und im speziellen von ValueType.

                        Schau dir mit einem Reflector an wie zB Double implementiert ist und erstelle deinen eigenen Datentyp.

                        Einfacher wäre wenn dein Datentyp von Double erbt und die Division-Operation überschreibt -> brauch nur der Divisor auf 0 geprüft werden und wenn er gleich 0 ist ein Fehler geworfen werden.

                        Um exakt zu sein wird +Inf immer erzeugt wenn das Ergebnis einer Rechnung größer als der MaxValue ist. D.h. somit wird bei einer Division auch +Inf zurückgegeben wenn der Divisor != 0 ist aber nahezu bei 0.

                        mfG Gü
                        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                        Comment


                        • #13
                          Danke! Machst du eig. auch was anderes, als ständig nur auf Posts hier zu antworten ?

                          Comment


                          • #14
                            Ja, warten bis ein neuer Post entsteht.
                            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                            Comment

                            Working...
                            X