ZeroDivide.st
changeset 21867 35e2dfcb1e46
parent 21863 fca2a068f458
child 24170 09200595d6d6
equal deleted inserted replaced
21866:e4e3c1a1c9f7 21867:35e2dfcb1e46
    75             Transcript showCR: ( 5 / divisor ).
    75             Transcript showCR: ( 5 / divisor ).
    76         ] on:ZeroDivide do:[
    76         ] on:ZeroDivide do:[
    77             Transcript flash.
    77             Transcript flash.
    78         ]
    78         ]
    79                                                                     [exEnd]
    79                                                                     [exEnd]
       
    80 
       
    81     the following suppresses the exception and results in NaN/Inf:
       
    82                                                                     [exBegin]
       
    83         |divisor|
       
    84 
       
    85         divisor := 0.
       
    86         Transcript showCR: (ZeroDivide ignoreIn:[ 5 / divisor ])
       
    87                                                                     [exEnd]
       
    88                                                                     [exBegin]
       
    89         |divisor|
       
    90 
       
    91         divisor := 0.
       
    92         Transcript showCR: (ZeroDivide ignoreIn:[ -5 / divisor ])
       
    93                                                                     [exEnd]
       
    94                                                                     [exBegin]
       
    95         |divisor|
       
    96 
       
    97         divisor := 0.
       
    98         Transcript showCR: (ZeroDivide ignoreIn:[ 0 / divisor ])
       
    99                                                                     [exEnd]
    80 "
   100 "
    81 ! !
   101 ! !
    82 
   102 
    83 !ZeroDivide class methodsFor:'initialization'!
   103 !ZeroDivide class methodsFor:'initialization'!
    84 
   104 
    91 defaultResumeValue
   111 defaultResumeValue
    92     "return +/- infinity here, if ever proceeded"
   112     "return +/- infinity here, if ever proceeded"
    93 
   113 
    94     |poorReceiver|
   114     |poorReceiver|
    95     
   115     
    96     (poorReceiver := self dividend) negative ifTrue:[
   116     poorReceiver := self dividend.
       
   117     poorReceiver isZero ifTrue:[
       
   118         ^ poorReceiver class NaN
       
   119     ].    
       
   120     poorReceiver negative ifTrue:[
    97         ^ poorReceiver class negativeInfinity
   121         ^ poorReceiver class negativeInfinity
    98     ].    
   122     ].    
    99     ^ poorReceiver class infinity
   123     ^ poorReceiver class infinity
   100 
   124 
   101     "
   125     "
   122      ] do:[
   146      ] do:[
   123         a / b
   147         a / b
   124      ]            
   148      ]            
   125     "
   149     "
   126 
   150 
   127     "Modified: / 20-06-2017 / 15:37:59 / cg"
   151     "Modified: / 20-06-2017 / 17:55:40 / cg"
   128 !
   152 !
   129 
   153 
   130 dividend
   154 dividend
   131     "Return the number that was being divided by zero."
   155     "Return the number that was being divided by zero."
   132 
   156 
   147 
   171 
   148 !ZeroDivide class methodsFor:'documentation'!
   172 !ZeroDivide class methodsFor:'documentation'!
   149 
   173 
   150 version
   174 version
   151     ^ '$Header$'
   175     ^ '$Header$'
       
   176 !
       
   177 
       
   178 version_CVS
       
   179     ^ '$Header$'
   152 ! !
   180 ! !
   153 
   181 
   154 
   182 
   155 ZeroDivide initialize!
   183 ZeroDivide initialize!