Gauche > Archives > 2012/02/25

2012/02/25 07:59:51 UTCRui
#
Gaucheで分母分子とも巨大な有理数をexact->inexactで浮動小数点数に変換すると誤差が大きくないですか?
#
そのときはあんまり深く追わずにすましたので具体的にどうだったのか思い出せないんですが、
#
いまコードみてみたら分子と分母を浮動小数点数にしてから割り算してるみたいですね
2012/02/25 08:01:39 UTCshiro
#
オーバーフローする場合は別処理してたと思うけど。
#
オーバーフローしない場合はたぶんあまりちゃんと考えてない。
#
でも正規浮動小数点数/正規浮動小数点数で結果も正規浮動小数点数の場合、どのくらい誤差出るかな? 1-2LSBくらいだろとか安直に考えてたんだけどだめ?
#
待てよ割り算の場合、シフトしてくから結構上位桁まで影響出ちゃうのか?
2012/02/25 08:06:58 UTCRui
#
なんか誕生日問題の確率を計算していたら+infとかになってあれ?と思ったんですよね
2012/02/25 08:07:22 UTCshiro
#
あ、オーバフローになるのは多分場合分け漏れだと思う。
2012/02/25 08:07:25 UTCRui
#
ちょっとどういう状況だったのかまた明日みてみようかな
2012/02/25 08:08:06 UTCshiro
#
オーバフローになるケースってのを一応条件分けして、その場合はもっと細かい計算をしてるんだけど、条件に漏れたか、細かい計算が間違ってるか。
#
具体的な数字が出てきてくれるとデバッグしやすいです。
2012/02/25 08:09:11 UTCRui
#
はい、ちょっと再現させてみます
2012/02/25 18:46:05 UTCRui
#
ソースが残ってないのでよくわからないのですが、巨大な数同士を/.で割ってNaNになっていただけのような気がしてきました
#
お騒がせしました
2012/02/25 19:03:01 UTCshiro
#
お手数おかけしました。今コード見直してたんだけど、bignum同士の/.は工夫の余地がありますね。どっちかoverflowしたら一度ratnumにしてからinexactに変換すべきだな。
2012/02/25 21:17:42 UTCkaki
#
(let-syntax ((foo
              (syntax-rules ()
                ((_ a) `#(,@a)))))
  (foo '()))
#
これがエラーになるんですが,正しくは #() ですよね
2012/02/25 21:52:47 UTCkaki
#
*** ERROR: Compile Error: invalid #<identifier user#unquote-splicing> form in this context: (#<identifier user#unquote-splicing> '())
2012/02/25 22:35:52 UTCshiro
#
正しくは#(quote ()) だと思いますが、(foo ()) でもエラーなのでしくじってるのは別のところですね。
2012/02/25 22:44:12 UTCshiro
#
hygienicに直した時のなおし漏れのような気がする
2012/02/25 22:52:49 UTCshiro
#
あー、(foo '()) => `#(,@(quote ()) => #() で良いのか。hygienicの扱いだけだな、まずいのは。
#
quasiquoteのhygienityのテストって無かったんだな。ついでに書いとこう。
2012/02/25 23:09:02 UTCshiro
#
quasiquoteのhygienity自体のテストはprimsynにあった。今回はマクロと絡む問題なのでmacroの方にテスト置いとくか…