5
votes

I am using math.acos() function :

math.acos(1.0000000000000002)

This throws a math domain error. Can someone tell the reason? I am getting this value calculated before and here this value gives error but if I remove 2 at the end it does not throw error. I did not get the reason to this.

2
The cosine of an angle is always in the range [-1.0, 1.0], so the inverse function is only defined for inputs in that range. You're giving acos a value larger than 1: there's no possible (real) angle whose cosine is greater than 1. - Mark Dickinson
What is your expected result, mathmatically? - Yu Hao
This specific problem comes up often in numerical programming. Voting to reopen. - David Hammen
I don't get why this question is closed. My colleague had this exact question today, and it's stated more or less how he asked it. - Phlucious
I encountered this issue when calculating math.acos(numpy.dot(a,b)) where numpy.dot returned 1.0000000000000002 instead of 1 (due to floating point precision). See this post for solutions to this. - DaBooba

2 Answers

11
votes

You are trying to do acos of a number for which the acos does not exist.

Acos - Arccosine , which is the inverse of cosine function.

The value of input for acos range from -1 <= x <= 1 .

Hence , when trying to do - math.acos(1.0000000000000002) you are getting the error.

If you try higher numbers, you will keep getting the same error - math.acos(2) - leads to - ValueError: math domain error

2
votes

Inverse cosine is defined only between -1 and 1, inclusive. The arc-cosine of 1.0000000000000002 has no mathematical or semantic meaning other than "does not exist" or "undefined".

Of course, since inverse cosine of 1 does exist, acos(1) doesn't throw any error.