繁体   English   中英

存储大整数

[英]storing large integer

整数 :3322000011111010203100311011211322020110122010113111301101000200

字符串以位为单位的整数将需要Integer的log2,即211.xxxx舍入为212位

一些用脚本撰写的程序说,将此值取平方,将得到很小的结果,但他需要的是大量没有的金钱。 sqrt是57636793900346419278364744407607.475108338

现在log2(sqrt整数)= 105.5位

但是我担心,如果我们不能完美地存储sqrt,我们将无法收回原始价值,

问题 :我们可以将这个平方根存储在105.5位(四舍五入为13字节+ 2位等),然后读取和平方值以取回原始值吗?

请指导我。

但是我担心,如果我们不能完美地存储sqrt,我们将无法收回原始价值,

问题:我们可以将这个平方根存储在105.5位(四舍五入为13字节+ 2位等),然后读取和平方值以取回原始值吗?

没有。

基本上,您要问的是,是否可以获取212位信息,通过求平方根将其压缩为106位,然后能够恢复原始数据而不会丢失。 无法做到这一点。

如果可能的话,您可以对106位应用相同的技术,将其压缩为52位,然后压缩为26位,依此类推,最终将任意数量的数据压缩为少于1位, 同时仍然能够恢复原始数据

问题:我们可以将这个平方根存储在105.5位(四舍五入为13字节+ 2位等),然后读取和平方值以取回原始值吗?

不需要。您需要使用整数的log_2(不是浮点数)来查看它需要多少位。 例如:Log_2(256)= 8位。 该数字可以存储为0x10000000。 但是,Log_2(256.123456789)〜= 8位也是如此。 但是,第二个数字显然还有更多信息。

要解决此问题,您可以将值乘以2或10的幂,然后将其存储为整数(这基本上是固定点: http : //en.wikipedia.org/wiki/Fixed-point_arithmetic )。 因此,在您的示例中,将57636793900900346419278364744407607.475108338乘以10 ^ 9得到整数:57636793900346419278364744407607475108338,这就是您要存储的内容。 Log_2是135.4,因此您至少需要136位信息才能准确存储该数字。

您不能这样做,因为数字的平方根并不总是int。并且您不能准确存储浮点数。 因此,问题是:1.如果存储平方根,则必须存储浮点数。 它本身会占用更多空间,而且也不准确。 2.如AIX所指出的,如果可能的话,您可以迭代相同的过程,然后仅可以恢复任意长数字,可能只有2个字节。 一个字节用于存储值,另一个字节用于存储平方的次数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM