整数とか実数とか正確数とか
http://d.hatena.ne.jp/tkuro/20090604/1244149299#c
なるほど。。。
shiro 2009/06/05 12:26 「整数」と「整数型」を混同されてませんか? 3も3.0も「整数」です。3.0は「整数型」では表現されませんが。
はい、、完全に混同してました。教えてもらったリンク先
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3A非正確な整数
の一番最後のshiroさんのまとめが凄くわかりやすい。一つだけ言い訳をしておくと、あそこを読んだ段階では
gaucheは数値として以下の種類の数を扱えます。 ・整数(例:100、3.0) ・有理数(例:1/2) ・実数(例:...) :
だったので、反射的に内部表現の事だと思い込んでしまったのです。って本当にただの言い訳だ・・・ごめんなさい。
odd?, even? のところの説明を読んで何となく大まかには理解。ついでに気になって内部を見てみると, realはmodf()で fraction部が0なら、という感じに条件分岐のよう。
////////// cut from number.c int Scm_IntegerP(ScmObj obj) { if (SCM_INTP(obj) || SCM_BIGNUMP(obj)) return TRUE; if (SCM_RATNUMP(obj)) return FALSE; /* normalized ratnum never be integer */ if (SCM_FLONUMP(obj)) { double d = SCM_FLONUM_VALUE(obj); double f, i; if ((f = modf(d, &i)) == 0.0) return TRUE; return FALSE; }
いろいろ勉強になって面白い。
ありがとうございました。