Path: coconuts.jaist!wnoc-tyo-news!etlnews.etl.go.jp!etlinn.etl.go.jp!etl.go.jp!trc.rwcp!rwc-tyo!news.iij.ad.jp!rim.or.jp!news.kddnet.ad.jp!news.dvlp.kddnet.ad.jp!news.cs.ritsumei.ac.jp!kuis-news!s2000!beauty!clair.noc.fujita-hu.ac.jp!fame.fujita-hu.ac.jp!chiba-ns!newssinet!news.nc.u-tokyo.ac.jp!makino From: makino@chianti.c.u-tokyo.ac.jp (Jun Makino) Newsgroups: fj.lang.fortran Subject: Re: multi-precision Date: 14 Jun 1996 07:11:49 GMT Organization: College of Arts and Sciences, Univ. of Tokyo Lines: 44 Distribution: fj Message-ID: References: NNTP-Posting-Host: muscat.c.u-tokyo.ac.jp In-reply-to: tomita@kek.jp's message of 14 Jun 1996 05:38:51 GMT >>>>> On 14 Jun 1996 05:38:51 GMT, tomita@kek.jp (Norikazu TOMITA) said: > この度、ベクトルのノルムと内積を非常に精度良く計算する必要が生じました。 > もっとも単純な方法は4倍精度を使う事なのですが、これでは当方が使っている > スパコンが使えません。そこで SLATEC(スペルに自身がありません)に転がって > いた倍精度の計算を多倍精度で計算し結果を倍精度に戻すルーチンを拾って来た > のですが、これがすこぶる遅いのです。ただの倍精度と比較してワークステーショ > ン上で4倍程度(4倍精度の計算よりも倍以上遅い)スパコンでは100倍程度も遅く > なってしまいます(ベクトル化できていないのが原因だと思われます)。 > そこで、 > 1、どこかに上で述べたような機能を持ったプログラムでベクトル化まで意識し > たものがありませんでしょうか? > 2、 ノルムや内積くらい(言い遅れましたが実数です)こうやれば精度良く計算 > できる、と言うアイデアをご存知の方はいらっしゃいませんでしょうか? えっと、よくわからないのですが、元の数は倍精度以上の精度があるの ですか?それとも、データは倍精度なんだけれど非常に次元が大きいと か、キャンセレーションが起きるとか(でも内積ならキャンセレーショ ンは起きないかな?)で精度がいるのでしょうか。 後者の場合には、「足し損なった余りを憶えておく」という方法が使え るとは思いますが、総和演算自体のベクトル化は困難かもしれません。 たくさんのベクトルのノルムを並列に求めるなら使えるかな。 x = 0 xsub = 0 do i = 1,n q = x x = x + (xsub + dx(i)) r = x - q xsub = xsub + (dx(i) - r) enddo と、こんな感じかな。(どっか間違っているかもしれません) 総和演算自体をベクトル化できる方法としては、例えばトーナメント方 式で隣接2項を足して半分の長さの配列を作るというのを繰り返すという 方法があります。これで十分な精度がでる場合もあるでしょう。 牧野@東大駒場