Create an account


Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Tut] Python Math Domain Error (How to Fix This Stupid Bug)

#1
Python Math Domain Error (How to Fix This Stupid Bug)

You may encounter a special ValueError when working with Python’s math module.

ValueError: math domain error

Python raises this error when you try to do something that is not mathematically possible or mathematically defined.

To understand this error, have a look at the definition of the domain:

The domain of a function is the complete set of possible values of the independent variable. Roughly speaking, the domain is the set of all possible (input) x-values which result in a valid (output) y-value.” (source)

The domain of a function is the set of all possible input values. If Python throws the ValueError: math domain error, you’ve passed an undefined input into the math function. Fix the error by passing a valid input for which the function is able to calculate a numerical output.

Here are a few examples:

Python Math Domain Error Sqrt


The math domain error appears if you pass a negative argument into the math.sqrt() function. It’s mathematically impossible to calculate the square root of a negative number without using complex numbers. Python doesn’t get that and throws a ValueError: math domain error.

Graph square roothttps://blog.finxter.com/wp-content/uplo...00x161.png 300w, https://blog.finxter.com/wp-content/uplo...150x81.png 150w" sizes="(max-width: 736px) 100vw, 736px" />

Here’s a minimal example:

from math import sqrt
print(sqrt(-1)) '''
Traceback (most recent call last): File "C:\Users\xcent\Desktop\Finxter\Blog\code.py", line 2, in <module> print(sqrt(-1))
ValueError: math domain error '''

You can fix the math domain error by using the cmath package that allows the creation of complex numbers:

from cmath import sqrt
print(sqrt(-1))
# 1j

Python Math Domain Error Log


The math domain error for the math.log() function appears if you pass a zero value into it—the logarithm is not defined for value 0.

Graph logarithmhttps://blog.finxter.com/wp-content/uplo...00x171.png 300w, https://blog.finxter.com/wp-content/uplo...150x85.png 150w" sizes="(max-width: 687px) 100vw, 687px" />

Here’s the code on an input value outside the domain of the logarithm function:

from math import log
print(log(0))

The output is the math domain error:

Traceback (most recent call last): File "C:\Users\xcent\Desktop\Finxter\Blog\code.py", line 3, in <module> print(log(0))
ValueError: math domain error

You can fix this error by passing a valid input value into the math.log() function:

from math import log
print(log(0.000001))
# -13.815510557964274

This error can sometimes appear if you pass a very small number into it—Python’s float type cannot express all numbers. To pass a value “close to 0”, use the Decimal module with higher precision, or pass a very small input argument such as:

math.log(sys.float_info.min)

Python Math Domain Error Acos


The math domain error for the math.acos() function appears if you pass a value into it for which it is not defined—arccos is only defined for values between -1 and 1.

Graph arccos(x)https://blog.finxter.com/wp-content/uplo...00x164.png 300w, https://blog.finxter.com/wp-content/uplo...150x82.png 150w" sizes="(max-width: 717px) 100vw, 717px" />

Here’s the wrong code:

import math
print(math.acos(2))

The output is the math domain error:

Traceback (most recent call last): File "C:\Users\xcent\Desktop\Finxter\Blog\code.py", line 3, in <module> print(math.acos(2))
ValueError: math domain error

You can fix this error by passing a valid input value between [-1,1] into the math.acos() function:

import math
print(math.acos(0.5))
# 1.0471975511965979

Python Math Domain Error Asin


The math domain error for the math.asin() function appears if you pass a value into it for which it is not defined—arcsin is only defined for values between -1 and 1.

Graph Arcsinhttps://blog.finxter.com/wp-content/uplo...00x162.png 300w, https://blog.finxter.com/wp-content/uplo...150x81.png 150w" sizes="(max-width: 734px) 100vw, 734px" />

Here’s the erroneous code:

import math
print(math.asin(2))

The output is the math domain error:

Traceback (most recent call last): File "C:\Users\xcent\Desktop\Finxter\Blog\code.py", line 3, in <module> print(math.asin(2))
ValueError: math domain error

You can fix this error by passing a valid input value between [-1,1] into the math.asin() function:

import math
print(math.asin(0.5))
# 0.5235987755982989

Python Math Domain Error Pow


The math domain error for the math.pow(a,b) function to calculate a**b appears if you pass a negative base value into it and try to calculate a negative power of it. The reason it is not defined is that any negative number to the power of 0.5 would be the square number—and thus, a complex number. But complex numbers are not defined by default in Python!

import math
print(math.pow(-2, 0.5))

The output is the math domain error:

Traceback (most recent call last): File "C:\Users\xcent\Desktop\Finxter\Blog\code.py", line 3, in <module> print(math.pow(-2, 0.5))
ValueError: math domain error

If you need a complex number, ab must be rewritten into eb ln a. For example:

import cmath
print(cmath.exp(0.5 * cmath.log(-2)))
# (8.659560562354932e-17+1.414213562373095j)

You see, it’s a complex number!

NumPy Math Domain Error — np.log(x)


import numpy as np
import matplotlib.pyplot as plt # Plotting y = log(x)
fig, ax = plt.subplots()
ax.set(xlim=(-5, 20), ylim=(-4, 4), title='log(x)', ylabel='y', xlabel='x')
x = np.linspace(-10, 20, num=1000)
y = np.log(x) plt.plot(x, y)
https://blog.finxter.com/wp-content/uplo...00x214.png 300w" sizes="(max-width: 391px) 100vw, 391px" />

This is the graph of log(x). Don’t worry if you don’t understand the code, what’s more important is the following point. You can see that log(x) tends to negative infinity as x tends to 0. Thus, it is mathematically meaningless to calculate the log of a negative number. If you try to do so, Python raises a math domain error.

>>> math.log(-10)
Traceback (most recent call last): File "<stdin>", line 1, in <module>
ValueError: math domain error

Where to Go From Here?


Enough theory, let’s get some practice!

To become successful in coding, you need to get out there and solve real problems for real people. That’s how you can become a six-figure earner easily. And that’s how you polish the skills you really need in practice. After all, what’s the use of learning theory that nobody ever needs?

Practice projects is how you sharpen your saw in coding!

Do you want to become a code master by focusing on practical code projects that actually earn you money and solve problems for people?

Then become a Python freelance developer! It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.

Join my free webinar “How to Build Your High-Income Skill Python” and watch how I grew my coding business online and how you can, too—from the comfort of your own home.

Join the free webinar now!

The post Python Math Domain Error (How to Fix This Stupid Bug) first appeared on Finxter.



https://www.sickgaming.net/blog/2020/11/...tupid-bug/
Reply



Possibly Related Threads…
Thread Author Replies Views Last Post
  [Tut] Show Don’t Tell: Commenting Python Best Practices xSicKxBot 0 3 Yesterday, 03:41 AM
Last Post: xSicKxBot
  [Tut] How to Catch and Print Exception Messages in Python xSicKxBot 0 6 11-23-2020, 11:45 PM
Last Post: xSicKxBot
  [Tut] Python next() xSicKxBot 0 7 11-22-2020, 08:17 AM
Last Post: xSicKxBot
  [Tut] Python Int to String with Leading Zeros xSicKxBot 0 18 11-17-2020, 03:22 AM
Last Post: xSicKxBot
  [Tut] Python Function Call Inside List Comprehension xSicKxBot 0 23 11-16-2020, 02:42 AM
Last Post: xSicKxBot
  [Tut] Python TypeError: Object is Not Subscriptable (How to Fix This Stupid Bug) xSicKxBot 0 21 11-13-2020, 12:04 AM
Last Post: xSicKxBot
  [Tut] How to Generate Text Automatically With Python? A Guide to the DeepAI API xSicKxBot 0 31 11-10-2020, 06:23 AM
Last Post: xSicKxBot
  [Tut] How to Get MD5 of a String? A Python One-Liner xSicKxBot 0 29 11-07-2020, 03:58 AM
Last Post: xSicKxBot
  [Tut] Overriding in Python xSicKxBot 0 39 10-29-2020, 04:49 AM
Last Post: xSicKxBot
  [Tut] How to Install PIL/Pillow in Python? A Helpful Illustrated Guide xSicKxBot 0 27 10-27-2020, 12:00 AM
Last Post: xSicKxBot

Forum Jump:

Become a Patron!
[-]
Upcoming Events

[-]
Latest Threads
Black Friday For Game Developers 2020
Last Post: xSicKxBot
Yesterday 11:41 PM
» Replies: 0
» Views: 2
Fedora - Getting started with Fedora Cor...
Last Post: xSicKxBot
Yesterday 11:41 PM
» Replies: 0
» Views: 1
News - PQube Is Releasing A Totally Free...
Last Post: xSicKxBot
Yesterday 11:41 PM
» Replies: 0
» Views: 1
News - Fortnite Recreates 100 Thieves Ca...
Last Post: xSicKxBot
Yesterday 11:41 PM
» Replies: 0
» Views: 2
News - Pokémon Teases ‘Very Special’ 25t...
Last Post: xSicKxBot
Yesterday 05:15 PM
» Replies: 0
» Views: 2
Xbox Wire - 7 Tips to Help You Run Your ...
Last Post: xSicKxBot
Yesterday 05:15 PM
» Replies: 0
» Views: 2
News - Video: The world generation tech ...
Last Post: xSicKxBot
Yesterday 05:15 PM
» Replies: 0
» Views: 3
News - Don’t Miss: A PC game for console...
Last Post: xSicKxBot
Yesterday 05:15 PM
» Replies: 0
» Views: 3
News - Ghost Of Tsushima Combat Designer...
Last Post: xSicKxBot
Yesterday 05:15 PM
» Replies: 0
» Views: 3
(Indie Deal) BloodRayne, BigBen, Dear Vi...
Last Post: xSicKxBot
Yesterday 03:41 PM
» Replies: 0
» Views: 3

[-]
Twitter

[-]
Sponsored
Get the Deal of the Week at RefurBees.com

Copyright © SickGaming.net 2012-2020