これはうまくいきます:
[1]> ((lambda (x) (/ x x)) 5)
1
でもこれは:
[2]> ((lambda (x y) (/ x y)) 5 2)
5/2
2.5 ではなく '5/2' を教えてください。どうすれば修正できますか?
これはうまくいきます:
[1]> ((lambda (x) (/ x x)) 5)
1
でもこれは:
[2]> ((lambda (x y) (/ x y)) 5 2)
5/2
2.5 ではなく '5/2' を教えてください。どうすれば修正できますか?
Common Lisp は可能な限り有理演算を実行します。浮動小数点数が必要な場合は、算術関数への入力として少なくとも 1 つの浮動小数点数を指定するか、結果に対して明示的な強制関数を使用する必要があります。
((lambda (x y) (float (/ x y)) 5 2)
また
((lambda (x y) (/ x y)) 5.0 2)
一般に、有理演算は浮動小数点よりも正確です。このことを考慮:
(setf x1 (/ 1 3)) => 1/3
(setf x2 (float (/ 1 3)) => 0.33333333
(* x1 3) => 1
(* x2 3) => 0.99999999