Path: coconuts.jaist!wnoc-tyo-news!news.u-tokyo.ac.jp!news.u-tokyo.ac.jp!makino From: makino@esanova.c.u-tokyo.ac.jp (Jun Makino) Newsgroups: fj.lang.c Subject: Re: Binary Floating Point Considered Harmful (was: Help!) Date: 18 Oct 1994 04:10:43 GMT Organization: College of Arts and Sciences, Univ. of Tokyo Lines: 57 Distribution: fj Message-ID: References: NNTP-Posting-Host: esanova.c.u-tokyo.ac.jp In-reply-to: chik@icot.or.jp's message of Mon, 17 Oct 1994 07:29:07 GMT In article chik@icot.or.jp (Takashi Chikayama) writes: > |> (2) 計算機が十進 (あるいは千進などの 10^n 進) で表現する > | > |> 一方 (2) はそれほど難しくありません. 10ビットで 1,000 種類の値を表現 > |> するようなエンコーディングをとるなどすれば, レジスタ長や記憶容量もあま > |> り損しませんし, 演算器もそれほど多くないハード量の追加でまずまずの性能 > |> を出せるでしょう > > という私の案に: > > |ただ、こうしたencordingをすると当然仮数のシフトは10^3単位ということに > |なってしまいますよね。そうすると、2進表現に比べて最大9bitぐらい精度を > |損してしまいます。そのかわり3--4bit分指数部を削ることができますが。 > > と書いておられますが, 仮数のシフトは10^1単位にしても良いのではないかと > 思っています. もちろんそのためにはシフトのハードウェアは若干面倒にな > ります. シフトのたびに X div 100 と X mod 100 * 1000 を計算することに > なりますからね. > まあテーブルを使うんでしょうね. 1000 エントリ × 10 ビット/エントリ > × 2 というテーブルだとすると 20K ビットですか. 私にはハードの知識が > 足りないので, これがどのぐらいのチップ面積のペナルティになり, 引くのに > どのぐらい時間がかかるのかわかりません. それとも普通のロジックで組ん > だ方が楽なのかな? どなたか教えて下さい. これって「若干面倒」どころではないのでは?もちろんどの程度の速さの演算 器を持ちたいかによるのですが、今時の普通のマイクロプロセッサ並に乗算、 加算それぞれがクロック毎にできるようにしようと思ったら、、、 シフタはややこしいので、乗算器はそもそもどんなものかを考えてみました。 例えば 1000進5桁のパラレルマルチプライヤを作るには、10ビット乗算器に div 1000、 mod 1000を計算する回路をつけたものが 25 組いることになりま せんか?そうするとテーブルあたり20Kbit の計算で 500Kbit、1bitあたり1ト ランジスタとすれば500K トランジスタですね。 53bit のパラレルマルチプラ イヤが 100-150K トランジスタというところでしょうから、やはりちょっと非 現実的ではという気がします。まあ、ROMのところはいくらかは詰め込めるで しょうから、トランジスタ数ほどの違いはありませんが。 時間の方は、ROMはまあ数ナノセカンドはかかるでしょうし、そのあとアダー とかごちゃごちゃつくわけなので、ただのバイナリマルチプライヤに比べれば 3倍、すごく頑張ってつくって2倍といったところでは?というわけで、トラン ジスタ数で4-5倍で速度は1/2か1/3ですから、面積当たりの計算速度では 10倍 くらい損になりますね。 いろいろ工夫すればなにかできるかも知れませんが、そこまで苦労するくらい ならただの BCD コードにしたほうが(メモリは3割程度余計にいりますが)賢 明ではないでしょうか。 BCDで浮動小数点演算をというのは「あってもいい」とは思います。ただ、BCD でも通常の2進に比べて面積、速度で損なことにかわりはないので、浮動小数 点演算の速さが売行きに影響する現状では BCD を採用すべきとは思えません。 そういえば IEEE854 (754ではない)は BCD も規定されているそうですね。 牧野@東大駒場