[ЗВУК] [ЗВУК] Теперь перейдем к практическому использованию вещественных чисел. Для этого решим обычную задачу — сложить два числа, только теперь они будут вещественными. Это делается полностью аналогично тому, как это происходило с целыми числами, только вместо int мы используем float — функцию для преобразования строки или чего угодно в вещественное число. Итак, два числа, по одному в строке, пока по-другому мы не умеем. И мы хотим напечатать сумму двух этих чисел. Запускаем и смотрим, что у нас получится. Допустим, мы хотим посчитать сумму 0.1 и 0.2. Вот результат, как видим — это 0.3 и еще что-то. Как я уже рассказывал, вещественные числа представляются в виде двоичной дроби, то есть какого-то числа деленного или умноженного на какую-то степень двойки. Ну и, естественно, не все числа представляются точными. Давайте посмотрим еще раз на эту нашу найденную тройку чисел: 0.1, 0.2 и 0.3. Проверим if-ом, есть ли у нас равенство такое, что сумма 0.1 и 0.2 равна 0.3. В принципе, даже с учетом неточного представления вещественных чисел может оказаться так, что этот if будет выполняться, то есть это условие будет истинным. Когда это может получиться? Когда у нас оба числа округлятся не в ту сторону, то есть они будут представлены, например, большим числом. Сейчас проверим, так оно или нет. Будет вводить Yes, если у нас выполнился этот if, то есть сумма все-таки равна 0.3. И в противном случае будем печатать No. Запустим и посмотрим. No, то есть тот эффект, о котором я говорил, что нельзя просто так взять и сравнить между собой два вещественных числа на равенство, проявился в таком простом примере. Соответственно, не забывайте, при сравнении на равенство, считать, когда у нас модуль разности двух чисел не превосходит какого-то небольшого значения ε, только тогда они у нас равны. А сравнение на равенство, как вы видите, может работать неправильно. Посмотрим еще другие случаи использования вещественных чисел. Для начала экспоненциальная запись, о которой я тоже уже говорил, посмотрим, как она выглядит. Допустим, мы хотим вещественное число, пусть это будет число 25. Чтобы оно стало вещественным, нужно написать 25.0, возвести в какую-нибудь большую степень и посмотреть, что напечатается. Например, 25 в степени 100 у нас будет представлено как некоторое вещественное число, не превосходящее 10, в нашем случае это 6.22 ну и еще много цифр, и затем e + 139. Значит, это наше число умножается на 10 в 139-й степени. Вводить можно точно так же, то есть если вы введете строку такой экспоненциальной записи и используете функцию float, то произойдет преобразование, и оно превратится в вещественное число. Давайте посмотрим, а как же у нас представляется на самом деле дробь 0.1. Точно она не представляется, но мы сможем увидеть некоторое количество знаков десятичных, которые в ней есть, и понять, насколько они точны. Для этого используем специальную волшебную пока что для нас штуку, которая позволяет выводить число с заданной точностью. Это записывается, как в фигурных скобочках строка [ЗВУК] 0:.25f. Мы не будем углубляться пока что в это, главное, что нужно знать, что число 25 — это количество десятичных знаков после точки, которые будут выведены. Во многих задачах сегодняшнего занятия вам нужно будет выводить числа с какой-то заданной точностью. 25 знаков, конечно, не потребуется, но обычно в условии задачи указано, сколько знаков нужно выводить. Если это не указано, выводите 6 знаков, в большинстве случае этого хватает. Ну или если волнуетесь, можете выводить 10 знаков, и тогда уже наверняка во всех задачах это будет работать. Итак, после того, как мы написали такую строку, мы должны написать слово format и вывести уже затем то, что мы хотим вывести — в нашем случае дробь 0.1. Запускаем и смотрим. Вот у нас, начиная с какого-то знака, который достаточно сложно прикинуть, примерно 17-й знак, у нас вместо нуля появляется там какая-то пятерка, ну и после этого идут уже какие-то цифры. Вот 0.1 представлена неточно. В Phyton есть еще одна штука, которая позволяет посмотреть на числитель и знаменатель той дроби, которая представляет наше вещественное число. Конечно на практике вам это вряд ли пригодится, но понять, как оно выглядит на самом деле, как хранится то или иное число, можно. Что для этого делается? Нужно написать вещественное число и затем вызвать метод as_integer_ratio, то есть как целочисленная дробь. Давайте посмотрим, будет ли у нас так работать. Да, работает, выводятся какие-то числа. Вот можно рассчитывать, что нижнее из этих чисел является степенью двойки. Здесь это достаточно большое число, ну и так непонятно. Сейчас мы попробуем на других примерах посмотреть и нам будет более понятно. Но тем не менее, вот она вывелась у нас дробь, ее числитель и ее знаменатель. Они между собой похожи. Чтобы оно совсем точным представлялось, числитель должен быть в 10 раз больше, чем знаменатель, но вот для 0.1 так не получается. Давайте посмотрим, как будет выглядеть 0.5 в виде дроби. Должно быть что-то в стиле 1/2-ой. И действительно, получается ровно 1/2. То есть 0.5 точно представляется. Если мы возьмем 0.125 — это 1/8, то тоже надеемся увидеть то, что видим — 1/8-ю. Отлично. А как у нас представляются, например, числа целые, например, число 500 представлено в виде вещественного числа, то есть 500.0. Мы посмотрим, как оно будет выглядеть в виде дроби. Это 500 разделить на 1, ну в общем-то тоже правильно. А если мы возьмем число, например, 1.5 — это должно получиться 3/2. И действительно, получается. То есть исходя из этого можно понять и запомнить, что у нас любое вещественное число представимо в виде какой-то дроби, где в знаменателе стоит степень двойки. Посмотрим на какое-то большое число еще, то есть мы хотим взять вещественное число, например, от 2 в степени 100. И как дробь оно представимо — это большое число разделить на 1. То есть все целые числа, когда мы используем метод as_integer_ratio, будут представимы в виде дроби, собственно, это целое число деленное на 1. Таким образом работать с этими числами как с дробями смысла особого нету, то есть мы просто используем стандартные операции для float, для вещественных чисел, но понимать, как они устроены внутри, это помогает. Таким образом можно посмотреть, например, с помощью этого метода, как именно ваше вещественное число представилось и понять, округлилось ли оно в меньшую сторону или в большую или насколько оно отличается от своего настоящего значения. Еще одна вещь, которую нужно знать или любить — это деление вещественное. То есть мы можем, например, целое число разделить на целое число, используя теперь только одну косую черту, один слэш вместо двух, и тогда у нас, даже если оба операнда были целыми, результат будет получаться вещественным. Итак, 1 делим на 2, смотрим, получаем 0.5. Если разделим их как целые числа, получим целую часть от деления — ноль. То есть единственная операция, которая отличается для вещественных чисел — это операция деления. Деление уже не нацело, а настоящее вещественное деление. Еще из приятного в Phyton — это есть остаток от деления на вещественное число. То есть мы можем, например, посчитать остаток от деления числа 11 целого на число 2.5 вещественного. И получить вещественное число, которое равно остатку от деления. Ну вообще говоря, это в других языках редко встречается, но в Phyton есть, и можно использовать, если это необходимо. [ЗВУК] [ЗВУК]