(Python) Вещественные числа


Вещественные числа

В программировании все числа различаются, прежде всего, на целые (integer) и дробные (float).

Чтобы определить какого типа у вас переменная, в языке Python имеется встроенная функция type():
name = "Ivan"
print(type(name))  #на экране будет <class 'str'>
n = 5
print(type(n))  # <class 'int'>
r = 5.0
print(type(r))  # <class 'float'>

Значение 5.0 - число, представленное в виде десятичной дроби.  В программировании все дробные числа - это числа, которые имеют в своей записи десятичную точку. Называются такие числа вещественными.
 
Вещественное число - это число, в записи которого есть десятичная точка. Целая и дробная части отделяются друг от друга точкой, а не запятой как в математике.

Например, числа \(1 \over 2\)\(\sqrt 2\)  являются вещественными числами. Для хранения таких чисел типа int недостаточно. 
Для представления вещественных чисел в Python используется тип данных float.

Даже если дробная часть числа равна нулю, как в переменной r в примере, все равно транслятор создаст в памяти вещественную переменную. Так как в записи числа есть десятичная точка!. Десятичная точка, как бы сигнал для транслятора, что необходимо создать именно вещественную переменную. 

Очень большие и очень маленькие числа  записываются с помощью "плавающей точки" (в так называемом научном формате).  
В научном формате число представляется в виде мантиссы (значащей части числа) и порядка. При записи мантисса и порядок отделяются друг от друга буквой e (обозначает 10 в какой-то степени). 

Например, можно сохранить в переменной значение заряда электрона ( \(1,60217662 \times 10^{-19}\) Кл), записав в следующем виде 
El = 1.60217662e-19 

Практически все вещественные числа не могут храниться в памяти компьютера с идеальной точностью, так как под их хранение выделяется ограниченное число бит.
 
Поэтому, при вычислениях с вещественными числами ошибки, связанные с неточностью представления, накапливаются. Причем чем меньше места выделено, тем больше будет эта ошибка.

 

Ввод

Для того, чтобы ввести вещественное число с помощью функции input() - необходимо преобразовать символьную строку, которая является результатом работы функции input(), в вещественное число с помощью функции float():
x = float(input())
Если необходимо ввести сразу несколько значений из одной строке, то используем тот же способ, что и для целых чисел:
x, y = map(float, input().split())

 

Вывод

При выводе вещественных чисел по умолчанию выводится 16 знаков после запятой. Не всегда такой формат необходим. Если нужно сократить формат вывода, то используется форматный вывод или F-строки.


Форматный вывод
Для этого применяется метод format() к строке, которую мы хотим вывести. А внутри строки записываются форматы в фигурных скобках после двоеточия. В круглых скобках функции format(), указываются имена переменных (или константы), значения которых будут подставляться в строку вместо фигурных скобок в указанном формате. Количество переменных должно совпадать с количеством фигурных скобок. Данный способ работает в Python, начиная с версии 3.
 
Пример
Пример Пояснение Вывод на экране
x = 1 / 6 
print("{:f}".format(x))
формат :f выводит по умолчанию 6 цифр  в дробной части
0.166667
x = 1 / 6 
print("{:.3f}".format(x))
:.3 обозначает, что необходимо вывести 3 знака после точки
0.167
x = 1 / 6 
print("{:12.4e}".format(x))
:12.4 - первое число (12) задает  общее количество позиций на вывод числа (включая точку);
второе число (4) - количество цифр в дробной части;
формат e - выводит число в научном формате.
  1.6667e-01
x = 123.45678901234567
print("{:.6g}".format(x)) 

{:.6g} - форматирует число так, чтобы оставить не более шести значащих цифр, и автоматически округляет число.

123.457
 


F-строка 
Еще один способ вывести на экран отформатированную строку - это использование f-строк (f-string). Данный способ доступен в Python, начиная с версии 3.6.
print(f"{x:f}")
print(f"{x:.3f}")
print(f"{x:12.4e}") 
F-строка - это строка-шаблон, начинается с символа (или F). Каждый раз когда мы хотим вставить в строку значение какой-либо переменной, нам нужно добавить  имя переменной, заключенной в фигурные скобки {}. Внутри фигурных скобок можно указать способ форматирования, который аналогичен методу fomat().


Кроме метода format() и F-строк, можно использовать другие способы форматирования вывода. Тот же самый результат получим, записав операторы вывода следующим образом:
print("%f" % (x))
print("%.3f" % (x))
print("%12.4e" % (x))
Такой способ форматирования имитирует функцию printf() языка С. Способ считается устаревшим, но в ряде случаев он бывает удобнее. Кроме этого, данный способ единственный (из указанных здесь), который работает в Python версии 2.5 и ниже.

Преобразование вещественного числа к целому

При решении задач часто приходится округлять вещественные числа до ближайших целых значений. Для этого имеются две функции.

Надо запомнить!
  1. Функция int(x) - отбрасывает дробную часть вещественного числа x.
  2. Функция round(x) - округляет вещественное число x до ближайшего целого (если дробная часть числа равна 0.5, то число округляется до ближайшего четного числа).
 
Примеры
print(int(20.12345))    # 20
print(round(2.5))    # 2
print(round(3.5))    # 4
print(round(-2.5))    # -2
print(round(-3.5))    # -4

Встроенные функции

Язык программирования Python включает много стандартных функций. Программист не видит их реализацию, она скрыта. Достаточно знать, как эти функции называются и что они делают.

Мы уже сталкивались с встроенными функциями:

  • print() — вывести на экран;
  • input() — считать с клавиатуры;
  • int() — преобразовать к целому числу;
  • float() — преобразовать к числу с плавающей точкой.

Функции min() и max()

Для определения минимального или максимального значения используются функции min() и max() соответственно.  Аргументов у этих функций может быть любое количество, главное, чтобы они все были одного типа.

print(min(1, 2, -8, 7))    # -8
print(max(2.5, -7.4, 13.9))    # 13.9


Модуль числа

Модулем положительного числа называется само число, модулем отрицательного числа называется противоположное ему число, модуль нуля – нуль. Для нахождения модуля  числа в Python используется стандартная функция abs().

 
print(abs(-8))    # 8
print(abs(8))    # 8
print(abs(0))    # 0


Модуль math

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

Модуль math – один из наиважнейших в Python. Этот модуль предоставляет обширный функционал для проведения вычислений с вещественными числами (числами с плавающей точкой). Для использования этих функций в начале программы необходимо подключить модуль, что делается командой import:

import math
# программный код


Приведем некоторые функции из этой библиотеки, которые полезно знать на начальном этапе программирования.

Функция Описание
Округление
int(x) Округляет число в сторону нуля. Это стандартная функция, для ее использования не нужно подключать модуль math.
round(x) Округляет число до ближайшего целого. Если дробная часть числа равна 0.5, то число округляется до ближайшего четного числа. round(1.5) == 2round(0.5) == 0. 
Это стандартная функция, для ее использования не нужно подключать модуль math.  
round(x, n) Округляет число x до n знаков после точки. Это стандартная функция, для ее использования не нужно подключать модуль math.  
floor(x) Округляет число вниз («пол»), при этом floor(1.5) == 1floor(-1.5) == -2
ceil(x) Округляет число вверх («потолок»), при этом ceil(1.5) == 2ceil(-1.5) == -1
abs(x) Модуль (абсолютная величина). Это — стандартная функция.
Корни, логарифмы
sqrt(x) Квадратный корень. Использование: math.sqrt(x).
Например, строка 
print(math.sqrt(4))
выведет 2.0.
log(x) Натуральный логарифм (логарифм по основанию e). Запись вида 
c = math.log(x, b) 
возвращает в переменную c значение логарифма по основанию b.
e Основание натуральных логарифмов e = 2,71828...
Тригонометрия
sin(x) Синус угла, задаваемого в радианах.
cos(x) Косинус угла, задаваемого в радианах.
tan(x) Тангенс угла, задаваемого в радианах.
asin(x) Арксинус, возвращает значение в радианах.
acos(x) Арккосинус, возвращает значение в радианах.
atan(x) Арктангенс, возвращает значение в радианах.
atan2(y, x) Полярный угол (в радианах) точки с координатами (x, y).
degrees(x) Преобразует угол, заданный в радианах, в градусы.
radians(x) Преобразует угол, заданный в градусах, в радианы.
pi Константа π = 3.1415...