Division durch null vermeiden

richie
2010-10-02
2023-08-17
  • richie - 2010-10-02

    Hallo ,
    Ich möchte eine division ausführen und der nenner soll ungleich 0 sein ..weil sonst stürtzt das programm ab ?
    wie kann ich das programm schreiben ??

    das programm sieht so aus :

    Test1:=(ausgabe/nenner);
    Result:=(remain/Test1 );

    Danke im vorraus

     
  • Matze001 - 2010-10-02

    Vergleich doch deinen nennen zuvor auf > Null und lass nur dann die Division zu!

    MfG

    Marcel

     
  • richie - 2010-10-02

    Matze001 hat geschrieben:
    Vergleich doch deinen nennen zuvor auf > Null und lass nur dann die Division zu!
    MfG
    Marcel

    Meinst du so etwa ??

    IF (nenner>0) ´´oder eher NULL´´ ??
    THEN
    Test1:=(ausgabe/nenner);
    Result:=(remain/Test1 );
    END_IF

     
  • Matze001 - 2010-10-02

    genau.

    Du musst natürlich auf >0 überprüfen, damit die Division bei allem Durchgeführt wird was größer als 0 ist.
    Wenn dein Nenner nun 0 ist könntest du mittels ELSE darauf reagieren und ggf. etwas anderes rechnen oder
    eine Fehlermeldung ausgeben.

    MfG

    Marcel

     
  • richie - 2010-10-03

    Matze001 hat geschrieben:
    genau.
    Du musst natürlich auf >0 überprüfen, damit die Division bei allem Durchgeführt wird was größer als 0 ist.
    Wenn dein Nenner nun 0 ist könntest du mittels ELSE darauf reagieren und ggf. etwas anderes rechnen oder
    eine Fehlermeldung ausgeben.
    MfG
    Marcel

    Danke Marcel !

     
  • gravieren - 2010-10-03

    Hi

    Sorry daß ich mich einmische.

    Ich benötige z.b.

    X = 100
    Y = 0.5

    Geht nicht, da Y kleiner als Null ist.

    Wollt ihr das

    Üblicherweise vergleicht man auf z.b. kleiner als 0.0001

    Somit kannst du auch 0.001 einsetzen.

    Oder habe ich einen Denkfehler ?

    0.0000000000000000001 ist auch größer als 0
    Es wird eine ganz schön "große Zahl" hierbei rauskommen.

     
  • richie - 2010-10-03

    Ich verstehe nicht wie 0.5 kleiner null ist ??? an sonsten bei mir ist sowieso nicht der fall ich habe nur ganzzahlige werte !
    es stimmt aber bei 0.0000001 wird die division ausgeführt weil die bedingung erfüllt ist

     
  • Anonymous - 2010-10-05

    Originally created by: ebt'ler

    Wieso vergleich Ihr nicht auf Ungleich, also mit "<>"?
    Negative Zahlen müssen doch auch zugelassen sein.

    Vielleicht wäre auch folgendes interessant:

    Zitat:
    Wenn Sie in Ihrem Projekt Funktionen mit Namen CheckDivByte, CheckDivWord,
    CheckDivDWord und CheckDivReal definieren, können Sie damit bei Verwendung des Operators
    DIV den Wert des Divisors überprüfen, beispielsweise um eine Division durch 0 zu verhindern. Der
    Name der Funktion ist festgelegt und darf nur diese Bezeichnung besitzen.

     
  • bschuster - 2010-10-06

    Die CheckDiv Funktionen sollten nur zu Testzwecken eingebaut sein,
    wenn die Funktionen implementiert sind, dann wird bei jeder Division im Programm die Check-Funktion implizit aufgerufen, d.h wirklich immer bei jeder Division !!!,
    Vorsicht, das Programm wird langsamer (zusätzlich zu den langsameren floating point Operationen).

    Ich würde immer auf <> 0 prüfen, nur bei den Floatingpoint Divisionen eine eigene Funktion schreiben,
    mit den Parametern Dividend, Divisor, Anzahl der zu berücksichtigenden Nachkommastellen
    der Rückgabewert ist das Ergebnis der Divison.
    Dabei kann in der Funktion die Prüfung auf <> 0 gemacht werden und eine Fehlerausgabe gemacht werden.

     

Log in to post a comment.