Path: coconuts.jaist!wnoc-tyo-news!news.u-tokyo.ac.jp!news.u-tokyo.ac.jp!makino From: makino@grape.c.u-tokyo.ac.jp (Jun Makino) Newsgroups: fj.lang.c Subject: Re: Binary Floating Point Considered Harmful (was: Help!) Date: 18 Oct 1994 15:20:08 GMT Organization: College of Arts and Sciences, Univ. of Tokyo Lines: 55 Distribution: fj Message-ID: References: NNTP-Posting-Host: grape.c.u-tokyo.ac.jp In-reply-to: chik@icot.or.jp's message of Tue, 18 Oct 1994 11:52:08 GMT In article chik@icot.or.jp (Takashi Chikayama) writes: > 10ビットで10^3種類の値を表す浮動小数点数の仮数部の表現をしたときに, > シフトを10ビット単位ではなく10倍単位に行なうハードウェアについて: > > |というわけで、トラン > |ジスタ数で4-5倍で速度は1/2か1/3ですから、面積当たりの計算速度では 10倍 > |くらい損になりますね。 > > なるほど. 本気で考えればもうちょっとましな回路を設計できるかもしれま > せんが, それにしてもペナルティは大きいということですね. > > |いろいろ工夫すればなにかできるかも知れませんが、そこまで苦労するくらい > |ならただの BCD コードにしたほうが(メモリは3割程度余計にいりますが)賢 > |明ではないでしょうか。 > > あれ? だって: > > A: 無理矢理10倍シフタを作る → 演算速度が10分の1 > B: BCD → メモリが3割増し (演算速度もペナルティあり) > C: 10ビットシフタで我慢 → 精度が平均5ビット損 (演算速度もペナルティあり) > D: 現状の二進表現 → 人間が苦労 > > のうちのどれをとるかという選択ですよね. 倍精度ぐらいの長さなら5ビット > (最悪でも9ビット) より3割の方がだいぶ大きいから, BCD よりは千進で10ビッ > トずつシフトの方がまだましじゃありませんか? どうせ BCD で単精度じゃ足 > りなさそうだし. 『BCD ならもう adder とかが LSI のセルライブラリにある』 > とかいう理由は別ですが. えっと、明確に書かなかった私が悪いのですが、10ビットシフタでやったとこ ろで、「演算速度が10分の1」というのはあまり変わりないのではないかと思 います。乗算器で、とにかく 1000 で割った答と余りがいるというのは、シフ トが10倍単位でも1000倍単位でも同じですよね?で、BCDだったら10で割った 余りでいいので、テーブルでやったとして1つのテーブルのエントリは1/100で 済む、で出力は4ビットなので1/2.5ですむ。でも、乗算器なら当然 1000 進の 9倍の数がいるので、結局テーブルサイズは 1/100/2.5*9 = 1/28 となってか なり楽です。実際はロジックで組めるでしょうけど。 というわけで、 BCD : メモリ量、演算速度にそれぞれペナルティあり 1000進: メモリ量のペナルティはBCDより小さい、プロセッサの 演算速度、ゲート数のペナルティは大きい ということになります。どちらが得かは立場によりますが、計算機を作る側に 立つとプロセッサのサイズが大きくなるのは開発コストおよびプロセッサの製 造コストの非線形な上昇を招くのに対し、メモリが増えるのは量産コストの線 形な上昇だけなので、たぶん BCD のほうが現実的ではないかと思います。 こったことをするとすれば、メモリ上では 1000 進表現で、ロード/ストアす る時に BCD と変換するなんてのも考えられますね。私は使いたくないような 気がしますが。 牧野@東大駒場