Что будет, когда вы во float зададите число 10^100
Задали такой вопрос на собеседовании я не смог ответить. Скажите что будет то
Задали такой вопрос на собеседовании я не смог ответить. Скажите что будет то
Возможно я не прав, но вроде бы в Python оператор "^" - это битовый "Исключающее ИЛИ". Если подразумевается операция возведения в степень - то это оператор "**". Возможно подразумевается запись числа с плавающей точкой, 10e+100.
Рекомендую использовать REPL для улучшения понимания работы с языком.
Кстати, если всё таки был вопрос по битовой операции, то действительно как было сказано в комментарии переменная станет целого типа и будет хранить значение 110
Наверное все же под записью 10^100 понимается 10 в степени 100.
А смысл вопроса был проверить понимание того как Python работает с вещественными числами и какие есть границы. Т.е. по идее вопрос был о том "влезет" такое большое число в переменную типа float или нет.
Если отвечать коротко - то влезет.
Если чуть длиньше, то ответ на этот вопрос может зависить от используемой платформы. И для проверки лучше использовать функцию sys.float_info
Например,
import sys
sys.float_info
В моем случае выводит
sys.float_info(
max=1.7976931348623157e+308,
max_exp=1024,
max_10_exp=308,
min=2.2250738585072014e-308,
min_exp=-1021,
min_10_exp=-307,
dig=15,
mant_dig=53,
epsilon=2.220446049250313e-16,
radix=2,
rounds=1
)
В контексте данного вопроса интересно значение max_10_exp - это, грубо говоря, максимальное число нулей у числа, которое может храниться в float. Это 308, что больше чем 100. А значит 10 в степени 100 без проблем можно использовать как float в Python.
Тут можно и в голове посчитать, не зря операцию еще называют сложением по модулю 2
100 ^ 10 =
64+32+4 ^ 8+2 = (совпадающих значащих разрядов нет, значит результат будет равен сложению)
64+32+4 + 8+2
итого, ответом будет
110.0
Тут уже в голове посчитать вряд ли получится, да и результат может разниться от платформы к платформе.
Если для хранения float в системе используется число двойной точности стандарта IEEE_754
То наше число 10**100, имеющее двоичное представление
10010010010011010110100100101100101001100001101111100111010110000101100100111100
00100110001001100111000001011111100111000101011001110010000001000111000100001000
11010011111001010101010110010010000110000100010101000001011101000111100010000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000
округляется до первых 53 битов (именно округляется, так что следующий за ними единичный бит учитывается)
10010010010011010110100100101100101001100001101111101000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000
Это число и будет в точности сохранено в переменной типа float
>>> 0b10010010010011010110100100101100101001100001101111101 << 280 == int(float(10**100))
True
правильный ответ получится тип флоат вот пруфы
>>> type(float(10^100))
<class 'float'>
>>> type(float(10**100))
<class 'float'>
но а по факту нужно знать на какой машине будет выполнен под тк в питоне есть какието ограничения от оперативы, типа с наибольшим числом