Я написал функцию с именем 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) .
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 элементов: