SRFI-48を追加しました
SRFI-48を追加したのですが、そのテストの過程でR5RSで不思議に思っていた'#'をPetite Chez Schemeが出力するのを目撃しました :)
こうすると見ることができます。
$ petite Petite Chez Scheme Version 7.4 Copyright (c) 1985-2007 Cadence Research Systems > (format #t "~5,5f" 1e50) 10000000000000000##################################.##### > (string->number "10000000000000000##################################.#####") 1e50
'#'に隠されている部分はいったい何なのかを見てみます。
> (inexact->exact 1e50) ;; R6RSなら(exact 1e50) 100000000000000007629769841091887003294964970946560
なぜ10000000000000000までなのでしょう・・・
Ypsilon 0.9.6-trunk/r393 Copyright (c) 2009 Y.Fujita, LittleWing Company Limited. > (log 10000000000000000 2) 53.1508495181978
53というのはIEEE754倍精度浮動小数点数における2進数での有効桁数ですね。なるほど :)
ちなみにpetiteでも普通に使う分には'#'は画面に出てきません。
$ petite Petite Chez Scheme Version 7.4 Copyright (c) 1985-2007 Cadence Research Systems > 100000000000000000000000000000000000000000000000000.00000 1e50 > 100000000000000007629769841091887003294964970946560.0 1e50
なので、今まで目にしなかったのですね。 :(
* R5RSの'#'は R5RS: 6.2.4 Syntax of numerical constants に書かれています。真ん中あたりを注意して見てください :D
* R6RSで'#'は仕様からついに無くなりました。
$ ypsilon Ypsilon 0.9.6-trunk/r393 Copyright (c) 2009 Y.Fujita, LittleWing Company Limited. > (import (srfi :48)) > (format "~5,5f" 1e50) "100000000000000000000000000000000000000000000000000.00000"
イプシロンでは普通にこうなります。:)