数値

Last-modified: 2016-06-10 (金) 22:41:08

数を扱うデータ型は以下の2つがある。

  • 整数型 (int型)
  • 浮動小数点数型 (float型)

単項命題関数

関数説明
(minusp x)x < 0 の場合に t さもなくば nil
(negativep x)(minusp x) と等価
(zerop x)x = 0 の場合に t さもなくば nil
(plusp x)x > 0 の場合に t さもなくば nil
(onep x)x = 1 の場合に t さもなくば nil
(evenp x)x が偶数の場合に t さもなくば nil
(oddp x)x が奇数の場合に t さもなくば nil

二項命題関数

関数説明
(lessp x y)x < y の場合に t さもなくば nil
(leqp x y)x ≦ y の場合に t さもなくば nil
(eqv x y)x = y の場合に t さもなくば nil
(geqp x y)x ≧ y の場合に t さもなくば nil
(greaterp x y)x > y の場合に t さもなくば nil
x < y(lessp x y) と等価(中置記法の糖衣構文)
x <= y(leqp x y) と等価(中置記法の糖衣構文)
x == y(eqv x y) と等価(中置記法の糖衣構文)
x != y(not (eqv x y)) と等価(中置記法の糖衣構文)
x >= y(geqp x y) と等価(中置記法の糖衣構文)
x > y(grexterp x y) と等価(中置記法の糖衣構文)

数学関数

関数説明
(minus x)x の反数(-x)を返す
(abs x)x の絶対値を返す
(sqrt x)x の平方根を返す
(exp x)ネピア定数 e の x乗値を返す
(expt x y)x の y 乗値を返す
(log x)x の自然対数値を返す
(log10 x)x の常用対数値を返す
(cos x)余弦値 cos x を返す
(sin x)正弦値 sin x を返す
(tan x)正接値 tan x を返す
(acos x)逆余弦(主)値 arccos x を返す
(asin x)逆正弦(主)値 arcsin x を返す
(atan x)逆正接(主)値 arctan x を返す
(ceiling x)x の天井値(x の小数部分が 0 に等しいなら x、さもなくば x よりも大きい最小の整数値)を返す。返値は整数型。
(floor x)x の床値(x の小数部分が 0 に等しいなら x、さもなくば x よりも小さい最大の整数値)を返す。返値は整数型。
(fix x)(floor x) と等価
(truncate x)x の整数部分(x が正の数なら x の床値、x が負の数なら x の天井値)を返す。返値は整数型。
(round x)x が正の数なら x を小数点第一位の値で四捨五入した値を返す。x が負の数なら (minus (round (minus x))) と等価。返値は整数型。
(plus x1 x2 …)和 x1 + x2 + … を返す
(xplus x1 x2 …)和 x1 + x2 + … を返す(整数型専用)
(difference x1 x2 …)差 x1 - x2 - … を返す
(xdifference x1 x2 …)差 x1 - x2 - … を返す(整数型専用)
(times x1 x2 …)積 x1 × x2 × … を返す
(xtimes x1 x2 …)積 x1 × x2 × … を返す(整数型専用)
(quotient x1 x2 …)商 x1 ÷ x2 ÷ … を返す
(xquotient x1 x2 …)商 x1 ÷ x2 ÷ … を返す(整数型専用)
x + y(plus x y) と等価(中置記法の糖衣構文)
x - y(difference x y) と等価(中置記法の糖衣構文)
x * y(times x y) と等価(中置記法の糖衣構文)
x / y(quotient x y) と等価(中置記法の糖衣構文)
x ** y(expt x y) と等価(中置記法の糖衣構文)
(remainder x y)xの絶対値 と yの絶対値 の商余に、x の符号を付けた値を返す
(mod x y)(remainder x y) と等価
(modulo x y)(xdifference x (xtimes y (xquotient x y))) と等価
(add1 x)(plus x 1) と等価
(sub1 x)(difference x 1) と等価
(max x1 x2 …)引数として与えられたすべての数値の最大値を返す
(min x1 x2 …)引数として与えられたすべての数値の最小値を返す

不具合

恐らく2進法での計算に伴う誤差だと思いますが、割り算 quotient にはこのような不具合があることが分かっています。

(quotient -0.54 0.09)
→ -6.0
(floor (quotient -0.54 0.09))
→ -7

「(atof (sprintf nil "%f" 値))」 で、いったん10進法の文字列にして浮動小数点数型データに戻すと、この誤差が解消されます。

(define (Float_intern this)
  (atof (sprintf nil "%f" this))
)
(Float_intern (quotient -0.54 0.09))
→ -7.0
(floor (Float_intern (quotient -0.54 0.09)))
→ -7