1

BigInteger に格納された 160 ビットの数値を使用する C# システムがあります。これらのものを円で表示したい、つまり、0->2^160 範囲を 0->2Pi 範囲にマッピングすることを意味します。どうすればいいですか?

すぐに思い浮かぶアプローチは、

BigInteger number;
angle = (number / pow(2, 160)) * TwoPi;

ただし、除算によって結果が整数に切り捨てられるため、複雑です。

4

2 に答える 2

2

わかりました、もう一度、最初から。

BigInteger は 0 -> 2^160 であるため、10^(-308) から 10^(+308) までを含むことができる double よりも小さいです。

BigInteger から double への明示的な変換があります。

だからあなたはこれをします:

BigInteger number;
var angle = ((double)number / Math.Pow(2, 160)) * TwoPi;

正確さが失われることはわかっていますが、サークルでは問題になりません。

于 2010-04-28T12:11:37.803 に答える
1

私は C# やその大きな整数について何も知らないので、ここに暗闇の中での刺し傷があります。

ディスプレイが (丸い) サッカー場ほどの大きさでない限り、ディスプレイの精度は、1 だけ離れている (または 10 または 100または10000000または10 ^ 40でも、それを理解する必要があります)。

私は単純に大きな整数を切り捨て、最上位の 32 ビットを取り、それらを符号なし整数として扱い、それ2^32を [0,1) の範囲に分割して (分割時に浮動小数点に変換します)、プロットします。それは円の周りを回っています。

大きな整数を切り捨てて左端の 32 ビットを取得することは、それを で割ることと同じだと思い2^128ますが、より良いビットシフトのアプローチがあるか、単純に直接ビットを取得できる可能性があります。

于 2010-04-28T12:48:48.967 に答える