Экспоненциальная нотация в 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.