0

整数:3322000011111010203100311011211322020110122010113111301101000200

整数をビット単位で文字列化するには、212.xxxxを丸めた212ビットの整数のlog2が必要です。

スクリプトランスに関するいくつかのプログラムでは、この値の平方根を取ると結果は小さくなりますが、彼は持っていない多額のお金を必要とします。平方根は57636793900346419278364744407607.475108338です

ここで、log2(sqrt Integer)=105.5ビット

しかし、sqrtを完全に保存しないと、元の値に戻すことができないのではないかと心配しています。

質問:この平方根を105.5ビット(13バイト+ 2ビットなどのように丸める)に格納し、後で元の値を取得するために読み取りと平方根を計算できますか?

案内してください。

4

3 に答える 3

2

しかし、sqrtを完全に保存しないと、元の値に戻すことができないのではないかと心配しています。

質問:この平方根を105.5ビット(13バイト+ 2ビットなどのように丸める)に格納し、後で元の値を取得するために読み取りと平方根を計算できますか?

いいえ。

基本的には、212ビットの情報を取得し、平方根を使用してそれらを106ビットに圧縮し、元のデータを損失なく復元できるかどうかを尋ねています。これはできません。

可能であれば、同じ手法を106ビットに適用して、52ビット、次に26ビットなどに圧縮し、最終的には任意の量のデータを1ビット未満に圧縮しながら、回復することができます。元のデータ

于 2012-05-16T06:23:09.867 に答える
1

質問:この平方根を105.5ビット(13バイト+ 2ビットなどのように丸める)に格納し、後で元の値を取得するために読み取りと平方根を計算できますか?

いいえ。必要なビット数を確認するには、整数のlog_2(浮動小数点ではない)を取得する必要があります。例:Log_2(256)=8ビット。その番号は0x10000000として保存できます。ただし、Log_2(256.123456789)〜=8ビットも同様です。ただし、その2番目の数値には明らかにより多くの情報があります。

これを回避するには、値に2または10の累乗を掛けて、整数として格納します(これは基本的に固定小数点です:http://en.wikipedia.org/wiki/Fixed-point_arithmetic)。したがって、この例では、57636793900346419278364744407607.475108338に10 ^ 9を掛けて、整数57636793900346419278364744407607475108338を取得します。これは、格納するものです。そのLog_2は135.4であるため、その数を正確に格納するには、少なくとも136ビットの情報が必要です。

于 2012-05-30T13:36:30.973 に答える
0

数値の平方根は常に整数であるとは限らないため、これを行うことはできません。また、浮動小数点数を正確に格納することはできません。したがって、問題は次のとおりです。1.平方根を格納する場合は、浮動小数点数を格納する必要があります。それ自体がより多くのスペースを必要とし、同様に不正確です。2. AIXが指摘しているように、可能であれば、同じ手順を繰り返してから、任意の長い数値を、場合によっては2バイトだけで復元できます。値を格納するための1バイトと、2乗する回数を格納するための別のバイト。

于 2012-05-16T07:19:48.260 に答える