Math domain error python что это

Я написал функцию с именем analyze_the_shape , которая берет список двумерных вершин, так что список находится в порядке прохождения по часовой стрелке вершин в двумерном евклидовом пространстве.

Я вызываю его в интерпретаторе и вношу [(0, 0), (0, 4.0), (4.0, 4.0), (4.0, 0)] в качестве ввода, но получаю ValueError : math domain error . Я ожидаю увидеть return ["SQUARE", 4.0] . Что я могу сделать?

Это ошибка, которую я получаю:

4 ответа

Это исключение означает, что cos_angle не является допустимым параметром для math.acos .

В частности, в этом примере он находится чуть ниже -1, что не соответствует определению acos .

Вероятно, вы могли бы попытаться вернуть свой возвращенный cos_angle в [-1,1] с чем-то вроде:

Однако это не вернет SQUARE , так как cos_angle более или менее равно -1 в вашем примере, а angle , таким образом, равно 180 . Вероятно, есть проблема с вашими вычислениями до исключения.

2 Procope [2017-05-08 22:01:00]

У меня была такая же проблема, и оказалось, что @crld прав. Мои входные значения должны находиться в диапазоне [-1, 1], но.

Итак, как правило, я предлагаю округлить все поплавки, которые вы подаете в math.acos .

Когда я запускаю свой код, трассировка стека я получаю:

Я знаю, что math.acos принимает только такие значения, что -1.0 . Если я распечатаю cos_angle прямо перед строкой angle = math.degrees(math.acos(cos_angle)) , она печатает True . Если я распечатаю cos_angle , он печатает -1.0 .

Я предполагаю, что проблема заключается в том, что способ хранения Python cos_angle не идеален и что значение, которое вы генерируете для cos_angle , всего лишь меньше -1.0 .

Возможно, было бы лучше, если бы вместо проверки abs(angle — 90.0) вы проверили, есть ли abs(cos_angle) .

Читайте также:  Asus wl 330n3g прошивка

Edit

Я думаю, что в этой строке есть ошибка:

Вероятно, это должно быть:

Обратите внимание на дополнительные парсеры вокруг (d3)**2 + (d4)**2 . Это гарантирует, что добавление будет выполнено, прежде чем вычесть это количество из hypo**2 .

При тесте либо проверке функции появляется сообщение о том что в строке

проходит math domain error. В подвох? Спасибо заранее

2 ответа 2

Для действительных чисел, корень из отрицательного числа не существует:

Для комплексных чисел корень есть:

Вы берете квадратный корень из отрицательного числа. Вот результат запуска вашего кода на сайте(я также вставил print(‘discriminant:’, discriminant)) https://repl.it/FKpS/1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками python math или задайте свой вопрос.

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.1.14.35781

Есть простая функция:

При итерации по простому массиву все работает:

однако, при итерации по объекту numpy.arange возникает исключение ValueError: math domain error :

Первые 5 выводов из списка, а дальше 3 из массива и ошибка вот какая то странная. IDE — PyCharm, версия питона 3.6.

1 Ответы

Вы вышли за область определения для арккосинуса [-pi/2, pi/2] :

А вообще, раз вы уже используете NumPy, я бы вам советовал пользоваться «векторизированными» функциями, вместо циклов:

nan — обозначает Not a Number

Сравнение производительности для массива из 1.000 элементов:

а теперь для массива из 1.000.000 элементов:

Rate this post

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *