Shiro Kawai
shiro****@lava*****
2004年 12月 2日 (木) 16:42:40 JST
ああ、昔、「いつか直さなきゃな」と思ったことをすっかり忘れて いました。uvectorの書き直しをした時についでにやれば良かった… とりあえずwrite-read同一性を保証するなら、下の変更で いけるんじゃないかと思います。これだと「必要最小桁数表示」に ならないので、必要以上に表示してしまうケースも出てきますが。 number.cのルーチンを使えばBurger&Dybvigのアルゴリズムで 必要十分な出力が得られますが、速度は遅くなります。 そのへんはいずれパラメータでカスタマイズできるようにしたいと思っています。 =================================================================== RCS file: /cvsroot/gauche/Gauche/ext/uvector/uvgen.scm,v retrieving revision 1.3 diff -u -r1.3 uvgen.scm --- ext/uvector/uvgen.scm 14 Nov 2004 03:16:30 -0000 1.3 +++ ext/uvector/uvgen.scm 2 Dec 2004 07:34:23 -0000 @@ -236,7 +236,7 @@ `(EQ . ,(lambda (x y) #`"(,|x| == ,|y|)")) `(PRINT . ,(lambda (out elt) - #`"Scm_Printf(,|out|,, \"%f\",, ,|elt|)")) + #`"Scm_Printf(,|out|,, \"%.7f\",, ,|elt|)")) (common-rules 'f32))) (define (make-f64rules) @@ -249,7 +249,7 @@ `(EQ . ,(lambda (x y) #`"(,|x| == ,|y|)")) `(PRINT . ,(lambda (out elt) - #`"Scm_Printf(,|out|,, \"%f\",, ,|elt|)")) + #`"Scm_Printf(,|out|,, \"%.17f\",, ,|elt|)")) (common-rules 'f64))) (define (dummy . _) "/* not implemented */") =================================================================== --shiro From: Shoji Kuzukami <kuzuk****@iidev*****> Subject: [Gauche-devel-jp] uvectorのwrite Date: Thu, 2 Dec 2004 16:23:01 +0900 > こんにちは,葛上です. > > gaucheを大規模数値計算のグルーに利用しています. > > uvectorを多用しているのですが, > f64vectorをwriteしても,数桁で出力が打ち切られてしまい > readしても精度が保証されません. > > 普通に flonum をwriteなり,displayすれば,長い桁の出力が得られるので, > 少なくともf64vectorをwriteするときには,できるだけ桁の精度を守ってほしいのですが,, > > write.cまわりとuvectorP.hまわりのコードを少し読んでみましたが, > 修正個所はつきとめましたが,少々複雑で自分で修正するのは,「ちと不安」です. > > もしよろしければ修正していただけませんか? > > read-blockのほうが正確だと思うのですが, > 折角S式でダンプするので, > マシンインディペンデント(のつもり)でやってみたいというのはあります. > > _______________________________________________ > Gauche-devel-jp mailing list > Gauch****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/gauche-devel-jp >