Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2020, 00:03   #1
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию О приоритете операций

Обнаружил на сайте all-python.ru тему: Извлечение корней в Python
https://all-python.ru/osnovy/korni.html
В разделе "Корень отрицательного числа" рассматривается пример:
Код:
x = -4 ** 0.5
print(x)
x = pow(-4, 0.5)
print(x)

-2.0
(1.2246467991473532e-16+2j)
и делается вывод:
Цитата:
Как видно из результата, оператор ** не выдает исключения и возвращает некорректный результат. Функция pow работает корректно. В результате получаем комплексное число 2j, что является верным.
Если посмотреть на этот пример более внимательно, то некорректный результат получается из-за некорректно записанного примера.
У операций существуют приоритеты. В той форме, как это записано в примере, следует, что надо извлечь корень из числа, а затем изменить знак.
Так как перед выражением стоит только знак равенства, то знак минус интерпретируется как изменение знака результата.
Т.е. извлекается корень из 4 и затем меняем знак результата: получаем -2.
Убедиться в этом можно, если расставить скобки.
Код:
x = (-4) ** 0.5
print(x)
x = pow(-4, 0.5)
print(x)

(1.2246467991473532e-16+2j)
(1.2246467991473532e-16+2j)
Получаем корректный результат.

PS: Обратной связи на сайте не нашёл, но поскольку уже не раз встречался с подобными вопросами, то решил понять, насколько верно моё рассуждение.

PSS: Аналогичные вопросы возникают, когда в выражении операции одного приоритета записываются подряд типа: 6 / 2 * (1 + 2)
По договорённости или по некоторому правилу джентльмена такие операции выполняются в порядке очерёдности слева направо.
Т.е. 6:2, затем умножаем на выражение в скобках, которое вычисляется. Т.е. получим 9.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 19.11.2020, 02:00   #2
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
насколько верно моё рассуждение.
рассуждение верное, потому что главное в арифметическом программировании полностью контролировать ситуацию, не оставляя компилятору, а уж тем более интерпретатору вариантов на просчёт результатов.

А выводы чайников, которые не понимают как программировать, и ссылки на которые вы даёте вообще не интересны )

Пусть читают форум 2006-2008 годов, там таких советов, типа не лениться ставить скобочки полно.

Если идти дальше, к функциональному программированию, то данные нужно просчитать заранее и вложить в фукнцию, т.е. в пхп или том же питоне, не должно быть никаких арифметических операций, особенно подсчёт корней или типа того.

Но так как последние годы модно использовать питон для обучения программирования, вот такая дичь идёт в функциональном программирование, детские выводы на которые я отреагировал, только по вашей просьбе ))
Alar вне форума Ответить с цитированием
Старый 19.11.2020, 19:08   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Alar, конечно же спасибо за реакцию.
Моё мировоззрение в этом вопросе не пошатнулось: скобки ставлю всегда
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос о приоритете скорости разными методами отправки в базу данных Jleksern PHP 6 05.09.2013 14:28
Психологический тест на JavaScript или С++ (JS в приоритете) Sirgo Фриланс 5 01.12.2012 00:02
Психологический тест на JavaScript или С++ (JS в приоритете) Sirgo Помощь студентам 1 29.11.2012 22:55
перегрузка операций С++ mego4el Помощь студентам 1 31.10.2011 11:38
как в BIOS версии V1.0, Тип AMI, CD-ROM поставить в приоритете wowan.mix Компьютерное железо 6 24.02.2010 19:21