Как мне заставить python работать со значениями порядка 1099511627776 бит (да, 137 ГБ)? Мне кое-что нужно реализовать (или, если вы можете предложить лучший способ сделать это, изменим методы). по-видимому, новые типы длины pgp имеют 3 раздела вместо 2. Теперь это: тип длины, тип значения длины и длина. Тип длины — 2 бита, что соответствует 191 байту, 8383 байтам, 4294967296 байтам или частичной длине. длина затем кодируется в байтах. как мне проверить, меньше ли значение 4294967296 байт, если я даже не могу сделать 1 << (4294967296 << 8)
? он слишком большой, чтобы вместить даже длинный.
Как вы обрабатываете чрезвычайно большие значения в python?
Ответы (4)
Он не только слишком велик, чтобы поместиться в длинном, но и слишком велик, чтобы поместиться в памяти любого компьютера. Я думаю, вы что-то неправильно поняли.
Насколько я понимаю, наибольшее значение ключа составляет 4 294 967 295 байт. Это 4 Гб, а не 137 Гб. Вы держите этот ключ в памяти не как одно число, а как строку байтов. Поэтому я не знаю, откуда вы взяли число размером 137 ГБ.
Если бы этого требовал PGP, это было бы невозможно реализовать. Поскольку есть реализации, я уверен, что это не так.
(Кроме того, я уверен, что есть модули PGP для Python, но если вы делаете это не потому, что вам это нужно, а для практики и потому, что вы хотите учиться, то продолжайте в том же духе!)
С трехаргументной формой pow()
.
pow(2, 4294967296 << 8)
? проблема не в вычислении значения. проблема заключается в сохранении значения. и у меня нет номера для мода
- person calccrypto; 03.01.2011
Используйте библиотеку больших чисел, например GMPY.
Я интерпретирую RFC4880 (ноябрь 2007 г.) по-разному. Раздел 3.2 описывает целые числа с множественной точностью как имеющие длину 2 октета, поэтому наибольший размер будет 64 КБ. Раздел 4.2.2 описывает новый формат пакета и документирует номера весов, которые вы описываете. Но формат пакета отличается от целочисленного формата множественной точности. Если вы интерпретируете это по-другому, обновите свой вопрос, указав точные разделы RFC, которые вы читаете.