250500 * 250500の出力を32ビットワードで表すにはどうすればよいですか?


-3

250500 * 250500 = 62,570,250,000です。lowとhighを使用してこれをどのように表現できますか?32ビットで表現できる最大数は4,294,967,295(2 ^ 32-1)であることを知っています


1
-1その質問「低[高]を使用してこの[数字]をどのように表現できるか」は意味がありません。ちなみに、負の数を格納しない場合、あなたが与える数字は最大の数字です。
barlop

おそらく低と高とは、低が0で高が1であるバイナリを意味します。
barlop

2
また、保存しようとしている数は620億で、32ビットで保存できる最大数は40億です。私が考えることができるのは、おそらく指数と仮数-バイナリ科学表記法です。
barlop

1
あなたがWindowsの計算機をチェックすると、あなたが与えるその620億の数字のバイナリ11101001 11000011 01001101 01000001 0000 は32ビット+最後にゼロである4ビットであることがわかります。したがって、最初の32ビットを1つの場所に保存し、他の場所にこれに2 ^ 4を掛けるということを保存すると、そのcudは機能します。たぶん、それは4の指数になるでしょう。しかし、指数にはまだビットが必要です。少なくとも3ビット。それは、指数を使用している場合です。私はuがu'reがそれを許可している場合だ2つの32ビット・ワードでちょうど32 bits.Maybe 35または36 bits.Perhapsにその数を格納することができますどのように見ることができない
barlop

2
なぜ32ビットのみに人為的に制限しているのですか?
ラムハウンド

回答:


1

バイナリでは、250500 * 250500 = 62,570,250,000は次のようになります:‭00111101
0010 10000100‬*‭00111101 0010 10000100‬ =
0110 1001 1100 0011 0100 1101 0100 00010000‬

数学の堅実な規則では、18ビットの数値に18ビットの数値を掛けた結果を36ビットに収めることができます。数学の堅固な規則では、圧縮によるビットを必ずしも減らすことができないと述べているため、対処しなければならない制限がいくつかあります。

それでも、いくつかのオプションがあります。

コンピューターを使用して、メートル...またはキロメートルを追跡できます。
50キロメートルの概念を追跡した場合、それは50,000メートルを追跡した場合と実質的に同じです。
同様に、250500 * 250500 = 62,570,250,000(つまり、250,500単一ユニットx 250,500単一ユニット)を追跡する代わりに、25050x25050 = 627,502,500(250,500デカユニットx 250,500デカ単位= 627,502,500平方デカ)のように、デカユニットを追跡できます。 -単位)。数値627,502,500は32ビットワードに収まります。

熟練したコンピュータープログラマーは、コンピューターのメモリが何を表すか(たとえば、メモリにユニットまたはデカユニットに関する情報が格納されている場合)を考慮し、メリットがある場合(制限の回避、または単により速い速度)。

10ユニットのグループであるデカユニットを追跡する代わりに、500ユニットのグループなど、異なるサイズのユニットのグループを追跡することもできます。概念は、数字が常に偶数であることがわかっている場合、数字を2で除算し、より小さい単位で可能性を高めることです。(ただし、特定の最大値4,294,967,295を下回るには、2で除算する必要があります。)ヘクトユニット(各100ユニット)を追跡できる場合、250,500 * 250,500ではなく、2,505 * 2,505 =になります。 6,275,025(12ビット×12ビット。結果を保存するために24ビットが必要になる場合がありますが、この特定のケースではたった23ビットしか必要ありません)。あなたのトラックに保つことができればquinque hectoユニット(500)は、501 * 501 = 251001(18ビットに格納されている9ビット時間9ビット)であろう。

有用なパターンを見つけることができるかどうかは、プログラミング言語に精通しているだけでなく、有用なプログラミングの1つの側面です。多くの場合、これを実行するのは、追跡しようとしている実際の概念に依存し、実現可能性(および実装の詳細)は、実際のシナリオによって異なります。

編集:マイナー修正。デモとして実際の数値を表示するために、約500単位の段落も拡大しました。


0

現在、質問には「250500 * 250500 = 62,570,250,000があります」とあります。

まあ、これは完全であり、まったくナンセンスです。
250500 * 250500 = 62,570,250,000。(質問で指定された
間違った計算)250500 * 250500 = 62,750,250,000。(右数学、質問がおそらく尋ねることを意味したもの)

これは私の計算のいくつかを捨てていました。タイプミスを想定し、それを修正した場合、62,750,250,000に対してこの回答を提供できます。

この質問に対する簡単でわかりやすい答えは、小さい数字をパワーとともに保存することです。それが答えであり、少数の単語に要約されています。その答えにはおそらく説明が必要なので、このテキストの残りの部分を説明します。

25,500は18ビットです。
2は1ビットです。
それには合計19ビットが必要です。それは32ビットです。動作します。

実際、この考え方は、x86 CPU(80387以降)がSignificandとしていくつかのビットを使用して浮動小数点数を追跡する方法と非常に似ています。

この質問では、62,570,250,000を直接の番号として保存する必要があるとは明記されていません。最初にできることは、それを平方根化して、結果が整数かどうかを確認することです。結果は整数であるため、完全に有効なソリューションが利用可能です。このソリューションでは、549,755,748,352(8,388,607 * 65,536、別名8,388,607 *(2の16乗)に等しい)の数値を格納できます。このシステムは正確に表現できることを数値の一つがある
62750250500
この同じシステムを格納することができないであろうにもかかわらず
62750250499を

ただし、質問では、可能な限り小さい数字をすべて保存する必要はなかったため、問題ありません。質問は、単純に62,750,250,500の数字を表す方法を望んでいました。それは完全に実行可能です。

したがって、保存するビットは次のとおりです
。0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 1 0 1 0 0 0 0 1 00‬

一般的なIEEE浮動小数点アセンブリに類似した手法を使用すると、これらのビットは次のように解釈されます。

  • 正の数(最初のビット)
  • 25500(ビット10から32)
  • それは一度に乗算されます
    • なぜなら...「1」はビット2から9の値です。

ビット2〜8および10〜14は先行ゼロであることに注意してください。これは7 + 5 = 12ビットで、この場合はあまり効果的ではありません。正の数が想定される場合、それはこの特定の場合には少し効果的/非効率的な13ビットであるため、これらが異なる方法で使用される可能性があります。(以前、32ビットのうち19ビットが必要だと言っていたことを思い出してください。13+ 19 = 32。)

ここでの考え方は、「出力」を大きな数値として保存する必要がないということです。この数値は2のべき乗として簡単に表現できることがわかっている場合です。62,750,250,000の値は事実上保存されており、その表現方法は、より小さな数を累乗とともに保存することです。基本的に、指定した既知の式と組み合わせると、この特定の数値を保存できるデータを保存します。(この式は、人々が2乗数を扱うことが多い状況で、他の数を保存するのに合理的に役立つ可能性があります。)

注:このシステムは多少似ていますが、x86アセンブリに焦点を当てたUniversity Assemblyクラスで説明したIEEEの浮動小数点システムと同じではありません。IEEE浮動小数点のオンラインコンバーターへのハイパーリンクを次に示します。そのシステムに使用できます。そのシステムでは、指数のビットは、残りのビットの乗算に使用される2の累乗を指定します。ただし、25,500は2の累乗ではないため、この場合には当てはまりません。IEEEの浮動小数点システムを使用しようとすると、62,750,250,000を16で割った値が3,921,890,625であることがわかります。したがって、この数値を3,921,890,625回(2の4乗)で表すことができます。それでも、必要な32ビットよりも大きい36ビットが必要になります(Intelのコプロセッサが非指数バージョンの数値を格納するために使用する24ビットよりも大きい)。

質問の「低と高を使用する」部分をほとんど無視したかもしれません。私は質問が何を求めているのかについてあまり明確ではありませんでした。ただし、このシステムは異なる目的で異なるビットを使用するため、データの指数部は、下位に配置された他のビットよりも「上位」ビットと見なすことができます。したがって、「これをどのように表現できるか」という質問は、太字の文によって直接回答され、この回答の残りの部分でさらに説明されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.