Математические неопределенности на примере Python

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Всем привет! Мы очень часто пользуемся привычными числами в наших любимых языках программирования. Привычные это 1, -1.5, pi или даже комплексные. А вот NaN, +Inf, -Inf используется нами гораздо реже.

Примечание:

В статье я использую элементарные функции Python версии 3.6.8, но многое будет актуально и для других языков, например для JS.

Вообще неопределенных ситуаций в математике достаточно много. Например, это деление на 0.
Введя в консоли

1/0

Вы получите ошибку ZeroDivisionError. Ожидаемо, скажите Вы? Да. Давайте попробуем другой пример:

0**0

Как известно, 0 в степени 0 это классическая математическая неопределенность.
Однако Питон говорит, что это 1. Возникает резонный вопрос:

image

Почему нам не дают «выстрелить в ногу» с делением на 0, но сообщают неверный результат при таком неопределенном действии?

Возможно, кто-то прямо сейчас негодует и кричит, что ответ прост: IEEE 754. И если я не ошибаюсь именно с его помощью договорились, что любое число в степени 0 это 1.

Вот тут начинается самое интересное. JavaScript тоже поддерживает IEEE (0.1+0.2!=0.3), но в нем 1/0 это бесконечность, а не ошибка деления на 0.

В итоге, мы имеем (все примеры для python):

1. Выброс ошибки при некорректных действиях

Примеры:

1/0 # ZeroDivisionError
log(0) #ValueError

2. Возврат неправильных значений

Пример:

0**0  #1
1**inf #1.0

3. Возврат специальных значений:

+-Inf, nan

Пример:

inf=float('inf')
inf-inf #nan

На мой взгляд это вносит путаницу.

Буквально сегодня заметил интересное поведение PHP:

var_dump(mt_rand(INF,INF)); //случайное между INF и INF - NULL??
//При этом функция должна возвращать только числа и false.

Я категорически против 2 варианта и поддерживаю, наверное, 1.

Потому что, как показывает пример с PHP, использовать inf и nan нужно с осторожностью. А как думаете Вы?
Источник: https://habr.com/ru/post/454352/


Интересные статьи

Интересные статьи

Тот, кто занимается машинным обучением (Machine Learning, ML), обычно, реализуя различные проекты, выполняет следующие действия: сбор данных, их очистка, разведочный анализ данных, ра...
Можно бесконечно холиварить о том, является ли GitLab хорошим продуктом. Лучше посмотреть на цифры: по итогам раунда инвестирования оценка GitLab составила 2,7 млрд долларов, в то время как преды...
Руководство для абсолютных чайновичков. (Прим. пер.: это советы от автора-индуса, но вроде дельные. Дополняйте в комментах.) Месяц — это много времени. Если тратить на обучение по 6-7 ча...
Бизнес-смыслы появились в Битриксе в начале 2016 года, но мало кто понимает, как их правильно использовать для удобной настройки интернет-магазинов.
Воодушевлённый рекламой структурных продуктов на Хабре, адаптировал python-скрипт для их самостоятельного тестирования. Основная идея в том, что подобные продукты предлагают 100% защиту капитала....