Экспоненциальная нотация в Python
Обновлено:
1. Что такое экспоненциальная нотация
Экспоненциальная нотация позволяет компактно записывать очень большие и очень маленькие числа.
Пример:
number = 3e2
print(number)
Результат:
300.0
Запись:
3e2
означает:
3 * 10 ** 2
То есть:
3 × 100 = 300
Букву e можно воспринимать как указание:
Умножить число слева на 10 в степени, указанной справа.
2. Общая схема
коэффициент e степень
Например:
5e3
означает:
5 * 10 ** 3
Результат:
5000.0
Ещё примеры:
print(1e2)
print(7e3)
print(2.5e4)
Результат:
100.0
7000.0
25000.0
Коэффициент перед e может быть как целым, так и вещественным.
3. Результат имеет тип float
Число, записанное через e, относится к классу float:
number = 3e2
print(type(number))
Результат:
<class 'float'>
Поэтому вывод содержит .0:
300.0
Сравним:
first_number = 3e2
second_number = 3 * 10 ** 2
print(first_number)
print(second_number)
print(type(first_number))
print(type(second_number))
Результат:
300.0
300
<class 'float'>
<class 'int'>
Экспоненциальная запись создаёт float, а обычные вычисления с целыми числами в этом примере создают int.
4. Положительная степень
Положительная степень увеличивает число:
print(1e1)
print(1e2)
print(1e3)
print(1e6)
Результат:
10.0
100.0
1000.0
1000000.0
Запись:
1e6
означает:
1 * 10 ** 6
То есть единицу с шестью нулями:
1 000 000
Важно: количество нулей напрямую совпадает со степенью прежде всего в записи вида:
1e6
Если коэффициент другой, результат также умножается на него:
3e6
Результат:
3 000 000.0
5. Отрицательное число
Коэффициент перед e может быть отрицательным:
print(-3e2)
print(-5e3)
print(-1.5e4)
Результат:
-300.0
-5000.0
-15000.0
Например:
-3e2
означает:
-3 * 10 ** 2
Результат:
-300
6. Отрицательная степень
Степень после e тоже может быть отрицательной:
print(3e-2)
Результат:
0.03
Запись:
3e-2
означает:
3 * 10 ** -2
А:
10 ** -2
равно:
0.01
Поэтому:
3 × 0.01 = 0.03
7. Примеры с отрицательной степенью
print(1e-1)
print(1e-2)
print(1e-3)
print(5e-4)
Результат:
0.1
0.01
0.001
0.0005
Отрицательная степень используется для компактной записи очень маленьких чисел.
8. Сравнение двух способов записи
first_number = 3e-2
second_number = 3 * 10 ** -2
print(first_number)
print(second_number)
print(first_number == second_number)
Результат:
0.03
0.03
True
Обе записи описывают одинаковое числовое значение.
При отрицательной степени обычное возведение в степень тоже возвращает float:
print(type(10 ** -2))
Результат:
<class 'float'>
9. Можно использовать большую букву E
Python понимает как маленькую:
3e2
так и большую букву:
3E2
Проверим:
print(3e2)
print(3E2)
print(3e2 == 3E2)
Результат:
300.0
300.0
True
Обычно в коде используют маленькую букву e.
10. Зачем нужна экспоненциальная нотация
Такая запись полезна, когда число:
- очень большое;
- очень маленькое;
- содержит много нулей;
- используется как технический коэффициент;
- относится к научным или аналитическим вычислениям.
Например, вместо:
small_value = 0.000001
можно написать:
small_value = 1e-6
По записи сразу видно порядок числа:
10 в степени −6
11. Ограниченная точность float
Экспоненциальная запись создаёт объект класса float.
Числа float имеют ограниченную точность, поэтому очень большие числа могут храниться приблизительно.
Если программе обязательно требуется точное целое число, лучше использовать целочисленную запись:
large_number = 3 * 10 ** 15
Или обычное целое число с нижними подчёркиваниями:
large_number = 3_000_000_000_000_000
Проверим типы:
print(type(3e15))
print(type(3 * 10 ** 15))
Результат:
<class 'float'>
<class 'int'>
12. Примеры из разработки
Очень маленький технический порог
В аналитике или обработке результатов может использоваться небольшое допустимое отклонение:
tolerance = 1e-6
Это:
0.000001
Перевод миллисекунд в секунды
Одна миллисекунда равна:
1e-3
секунды.
milliseconds = 500
seconds = milliseconds * 1e-3
print(seconds)
Результат:
0.5
Большие объёмы данных
Один миллиард можно компактно записать так:
one_billion = 1e9
Но если требуется именно точное количество объектов, лучше использовать int:
one_billion = 10 ** 9
13. Основные правила
Экспоненциальная запись:
3e2
означает:
3 * 10 ** 2
Результат:
300.0
Запись через e создаёт объект класса:
float
Положительная степень увеличивает число:
2e3
Результат:
2000.0
Отрицательная степень уменьшает число:
2e-3
Результат:
0.002
Отрицательным может быть и коэффициент:
-2e3
Результат:
-2000.0
Для точных больших целых чисел можно использовать:
2 * 10 ** 15
или:
2_000_000_000_000_000
Домашнее задание
Задание 1. Перевод миллисекунд
Создать функцию:
convert_milliseconds_to_seconds()
Функция принимает количество миллисекунд и возвращает количество секунд.
Использовать экспоненциальную запись:
1e-3
Примеры:
print(convert_milliseconds_to_seconds(500))
print(convert_milliseconds_to_seconds(2500))
Ожидаемый результат:
0.5
2.5
Задание 2. Техническое отклонение
Создать функцию:
create_tolerance_report()
Функция принимает числовое значение.
Внутри функции создать допустимое отклонение с помощью экспоненциальной нотации:
tolerance = 1e-6
Функция должна вернуть f-строку:
Проверяемое значение: 0.000004. Допустимое отклонение: 0.000001.
Вызвать функцию с несколькими небольшими числами.
Задание 3. Большое количество операций
Создать функцию:
create_operations_report()
Функция принимает количество операций в секунду.
Внутри функции создать:
million = 1e6
Функция должна вычислить, сколько миллионов операций выполняется в секунду, и вернуть сообщение:
Количество операций: 2500000.0. Это 2.5 миллиона операций в секунду.
Использовать:
- экспоненциальную нотацию;
- математические операции;
- f-строку;
return.