Дано неотрицательное число, записанное в виде двоичной дроби: запись содержит только цифры 0 и 1 и, возможно, точку. Запись числа содержит не более 30 символов. Переведите это значение в величину типа float и выведите результат.
Ввод | Вывод |
---|---|
11.01 |
3.25 |
100 |
4 |
0.111111 |
0.984375 |
Дано действительное неотрицательное число, не превосходящее 100, записанное в десятичном виде с фиксированной точкой. Необходимо представить его в виде двоичной дроби с фиксированной точкой и вывести это представление. Ответ должен отличаться от верного не более, чем на 2-32 степени, поэтому необходимо вывести не менее 32 двоичных цифр после точки.
Ввод | Вывод |
---|---|
3.25 |
11.01 |
4 |
100 |
0.1 |
0.00011001100110011001100110011001100110011 |
Дана запись двоичной периодической дроби, которая включает в себя:
Переведите значение этой дроби в величину типа float и выведите результат. Общая длина входной строки не превосходит 30 символов.
Ввод | Вывод |
---|---|
0.(01) |
0.33333333333333 |
11.01 |
3.25 |
10.0(101) |
2.357142857143 |
Дано рациональное число. Запишите его в виде двоичной периодической дроби.
На вход программа получает два натуральных числа n и m, каждое из которых не превосходит 1000. Программа должна вывести значение n/m, записанное в виде двоичной периодической дроби, при этом длина непериодической дробной части и длина периода должны быть минимально возможными. Если данное число является конечной двоичной дробью, периодическую часть выводить не надо.
Формат вывода двоичной дроби соответствует предыдущей задаче.
Ввод | Вывод |
---|---|
1 3 |
0.(01) |
13 4 |
11.01 |
5 14 |
0.0(101) |
Дана запись двоичной периодической дроби. Необходимо представить ее в виде несократимой рациональной дроби n/m. Программа должна вывести значения n и m.
Ввод | Вывод |
---|---|
0.(01) |
1 3 |
11.01 |
13 4 |
0.0(101) |
5 14 |
В следующих задачах рассмотрим вымышленный тип данных, запись которого содержит \(1+p+m\) бит, где 1 бит отводится на знак числа, \(p\) бит отводится на хранение порядка числа, \(m\) бит отводится на хранение дробной части мантиссы числа. Например, для чисел двойной точности \(p=11\) и \(m=52\).
Хранение чисел осуществляется так же, как в формате IEEE-754.
А именно, порядок хранится в смещённом представлении,
код порядка 0b011...11
соответствует порядку 0,
в битах мантиссы хранятся биты нормализованного представления
числа после точки.
Специальное значение порядка 0b11...11
не используется
(зарезервировано за константами inf и nan). Специальное
значение порядка 0b00...00
означает, что
в этом случае в мантиссе хранятся биты ненормализованного представления.
В последующих задачах даны числа \(p\) и \(m\), при этом \(7\le p \le 11\), \(5\le m\le 52\).
Напомним, что машинным эпсилоном называется такое наименьшее положительное число \(\varepsilon\), представимое в данном типе, что \(1+\varepsilon\neq1\).
По данным числам \(p\) и \(m\) определите значение машинного эпсилон для действительного типа данных размера \(1+p+m\) бит, запишите его в переменную типа float и выведите его.
Ввод | Вывод |
---|---|
11 |
2.220446049250313e-16 |
Найдите наименьшее целое число, которое не может быть представлено в этом типе данных точно.
Вычислите его в переменной типа int
(в питоне же длинная целочисленная арифметика)
и выведите ответ.
Ввод | Вывод |
---|---|
11 |
9007199254740993 |
Определите наибольшее число, которое может быть представлено в этом типе данных. Оно будет каким-то целым числом,
поэтому его можно точно вычислить в переменной типа int
и вывести.
Ответ в примере слишком большой, приведём его первые и последние цифры. Всего в ответе 309 цифр.
Ввод | Вывод |
---|---|
11 |
1797...8368 |
Определите наименьшее положительное число, которое может быть представлено в этом
типе данных. Обратите внимание, что при значении порядка 0b00...000
в мантиссе хранится ненормализованное представление числа.
Запишите результат в переменную типа float
и выведите его.
Ввод | Вывод |
---|---|
11 |
5e-324 |
В модуле math есть функция math.isinf(x), которая возвращает True, если число является положительной
или отрицательной бесконечностью, и False в противном случае. Самостоятельно реализуйте аналог этой функции.
Решение оформите в виде функции def is_inf(x: float) -> bool
. Функция принимает аргумент,
который может быть любым значением типа float
, в том числе NaN.
Сдайте на проверку только тело функции. Например, аналогичная функция is_nan
может
выглядеть так:
def is_nan(x): return x != x
Вызов функции | Возвращаемое значенрие |
---|---|
is_inf(1.0) |
False |
Даны числа \(p\) и \(m\) (в первой строке входных данных).
Во второй строке записаны \(1 + p + m\) символов 0 или 1:
битовое представление действительного числа.
Первый бит — знаковый, затем \(p\) бит показателя степени (от старшего к младшему),
затем \(m\) бит мантиссы (от старшего к младшему). Определите значение этого числа, запишите
его в переменную типа float
и выведите его.
Гарантируется, что не все биты показателя степени равны 1. Также не забывайте, что если все биты показателя степени равны 0, то в мантиссе хранится денормализованное представление числа.
Ввод | Вывод |
---|---|
11 52 |
1.0 |
11 52 |
0.3333333333333333 |
11 52 |
-5e-324 |
Даны три действительных числа: a, b, c. Проверьте, выполняется
ли равенство a+b=c. Если равенство выполняется, выведите YES
, если не выполняется,
выведите NO
.
Числа a, b, c — действительные, положительные, не превосходят 10 и заданы не более, чем с 7 знаками после точки.
Ввод | Вывод |
---|---|
2 |
NO |
0.1 |
YES |
Подобную задачу вы уже решали.
В первый день спортсмен пробежал x километров, а затем он каждый день увеличивал пробег на 70% от предыдущего значения. По данному числу y определите номер дня, на который пробег спортсмена составит не менее y километров.
На вход программа получает два числа x и y. Числа положительные, действительные, не превосходят 1000, заданы с точностью до шести знаков после запятой.
Программа должна вывести единственное целое число.
Ввод | Вывод |
---|---|
10 30 |
4 |
И такая задача решалась.
В первый день спортсмент пробежал x километров, а затем он каждый день увеличивал пробег на 70% от предыдущего значения.
По данному числу y определите номер дня, на который суммарный пробег спортсмена составит не менее y километров.
На вход программа получает два числа x и y. Числа положительные, действительные, не превосходят 1000, заданы с точностью до шести знаков после запятой.
Программа должна вывести единственное целое число.
Ввод | Вывод |
---|---|
10 100 |
4 |
В некоторой сверхсекретной лаборатории изучаются физические возможности животных. Любой живой организм нуждается в трех компонентах пищи —белках, жирах и углеводах. Известен набор продуктов, имеющийся в распоряжении лаборатории и меню животных — сколько единиц каждого продукта они получают. Известно также, сколько белков, жиров и углеводов необходимо для нормальной жизнедеятельности животного. Необходимо определить, получает ли животное достаточное количество питательных веществ.
Известно, что животному требуется в сутки \(X\) белков, \(Y\) жиров и \(Z\) углеводов. Известно также, что всего животное получает в сутки \(N\) продуктов питания, и для каждого из них известны \(A_i\), \(B_i\), \(C_i\) и \(Q_i\) — соответственно энергетическая ценность единицы продукта в белках, жирах и углеводах и количество единиц этого продукта.
В первой строке входных данных записаны числа \(X\), \(Y\) и \(Z\) (действительные неотрицательные числа, не превосходящие 25000, заданные с точностью до 5 знаков после точки). Во второй строке записано целое неотрицательное число \(N\), не превосходящее 25000. Далее на \(N\) строках записаны соответственно \(A_i\), \(B_i\), \(C_i\) и \(Q_i\) (действительные неотрицательные числа, не превосходящие 100, заданные с точностью до 5 знаков после точки).
Выведите YES
, если данный пищевой рацион является достаточным по всем параметрам и NO
в противном случае.
Задача должна быть решена с использованием арифметики чисел типа float
.
Ввод | Вывод |
---|---|
1.0 1.0 1.0 |
YES |