Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get NaN when I divide by zero

Tags:

python

When I do floating point division in Python, if I divide by zero, I get an exception:

>>> 1.0/0.0 Traceback (most recent call last):   File "<stdin>", line 1, in <module> ZeroDivisionError: float division 

I'd really like to get NaN or Inf instead (because the NaN or Inf will propagate through the rest of my calculation correctly and not kill my program).

How can I do this?

like image 517
Ken Bloom Avatar asked Apr 04 '12 13:04

Ken Bloom


People also ask

Is Nan division by zero?

No, because in mathematics, division by zero is simply undefined and infinity is commonly not a value (or not a single value).

What do you do when you divide by zero?

So zero divided by zero is undefined. So, let's label it as that. Make sure that when you are faced with something of this nature, where you are dividing by zero make sure you don't put an actual number down, or a variable down.

Does Nan mean 0?

Bookmark this question. Show activity on this post.

How do you solve zero divided by zero?

One can argue that 0/0 is ​0, because 0 divided by anything is 0. Another one can argue that 0/0 is ​1, because anything divided by itself is 1. And that's exactly the problem! Whatever we say 0/0 equals to, we contradict one crucial property of numbers or another.


2 Answers

The easiest way to get this behaviour is to use numpy.float64 instead of Python default float type:

>>> import numpy >>> numpy.float64(1.0) / 0.0 inf 

Of course this requires NumPy. You can use numpy.seterr() to fine-tune the error handling.

like image 168
Sven Marnach Avatar answered Oct 03 '22 22:10

Sven Marnach


Method 1:

try:     value = a/b except ZeroDivisionError:     value = float('Inf') 

Method 2:

if b != 0:     value = a / b else:     value = float('Inf') 

But be aware that the value could as well be -Inf, so you should make a more distinctive test. Nevertheless, this above should give you the idea how to do it.

like image 40
glglgl Avatar answered Oct 04 '22 00:10

glglgl