(14-3)[ML] real型の定数と基本操作

real型の定数

以下のいづれかの形式である。

  • 小数点を含む10進数表現
  • 2.997E8のような指数部を含む科学技術表現。この場合は、2.997掛ける10の8乗、つまり、299700000を表す。少数部分は小数点を含まなくてもよい。
  • 整数同様、負の定数は、~rのように表記する。

以下、real型の定数の例である。

# 3.14;
val it = 3.14 : real
# 1e2;
val it = 100 : real
# val C = 2.9979E8;
val C = 2.9979E8 : real
# val HT = ~259.3467;
val HT = ~259.3467 : real

(補足)数字の定数の場合、real型かint型はその表記方法で決定される。これら二つの型は、異なる型であり、自動変換も行われない。従って、これらのデータを四則演算などで混在して使用すると以下のように型エラーとなる。

# 1 + 3.14;
stdIn:6.1-6.8 Error:
  operator and operand don't agree
  operator domain: 'D#int  * 'D#int
  operand: 'D#int  * 'B#{real, float}
#

real型の基本操作(対話型環境に定義済み)

意味
~ rrの-1.0倍
a + baとbの和
a - baとbの差
a * daとbの積
a / daとbの商
a > ba > bの時true
a < ba < bの時true
a >= ba >= bの時true
a <= ba <= bの時true
abs rrの絶対値
real nint型の数nのreal型への変換
floor rr以下の最大の整数
ceil rr以上の最小の整数
round rrを絶対値の小さい方に丸めた整数
trunc rrの少数部分の切り捨てた整数

real型の基本操作(ライブラリ関数)

real型の基本ライブラリ名はRealである。その内容は以下の通り。

# structure A = Real;
structure A
: sig
    type real = real
    val != : real * real  -> bool
    val * : real * real  -> real
    val *+ : real * real * real  -> real
    val *- : real * real * real  -> real
    val + : real * real  -> real
    val - : real * real  -> real
    val / : real * real  -> real
    val < : real * real  -> bool
    val <= : real * real  -> bool
    val == : real * real  -> bool
    val > : real * real  -> bool
    val >= : real * real  -> bool
    val ?= : real * real  -> bool
    val abs : real  -> real
    val ceil : real  -> int
    val checkFloat : real  -> real
    val class : real  -> IEEEReal.float_class
    val compare : real * real  -> order
    val compareReal : real * real  -> IEEEReal.real_order
    val copySign : real * real  -> real
    val floor : real  -> int
    val fmt : StringCvt.realfmt  -> real  -> string
    val fromDecimal : IEEEReal.decimal_approx  -> real
    val fromFloat : float  -> real
    val fromInt : int  -> real
    val fromLarge : IEEEReal.rounding_mode  -> LargeReal.real  -> real
    val fromLargeInt : LargeInt.int  -> real
    val fromManExp : {exp:int , man:real}  -> real
    val fromString : string  -> real option
    val isFinite : real  -> bool
    val isNan : real  -> bool
    val isNormal : real  -> bool
    val max : real * real  -> real
    val maxFinite : real
    val min : real * real  -> real
    val minNormalPos : real
    val minPos : real
    val negInf : real
    val nextAfter : real * real  -> real
    val posInf : real
    val precision : int
    val radix : int
    val realCeil : real  -> real
    val realFloor : real  -> real
    val realMod : real  -> real
    val realRound : real  -> real
    val realTrunc : real  -> real
    val rem : real * real  -> real
    val round : real  -> int
    val sameSign : real * real  -> bool
    val scan :
      ['a .(char, 'a) StringCvt.reader  -> (real, 'a) StringCvt.reader]
    val sign : real  -> int
    val signBit : real  -> bool
    val split : real  -> {frac:real , whole:real}
    val toDecimal : real  -> IEEEReal.decimal_approx
    val toFloat : real  -> float
    val toInt : IEEEReal.rounding_mode  -> real  -> int
    val toLarge : real  -> LargeReal.real
    val toLargeInt : IEEEReal.rounding_mode  -> real  -> LargeInt.int
    val toManExp : real  -> {exp:int , man:real}
    val toString : real  -> string
    val trunc : real  -> int
    val unordered : real * real  -> bool
    val ~ : real  -> real
    structure Math
    : sig
        type real = real
        val acos : real  -> real
        val asin : real  -> real
        val atan : real  -> real
        val atan2 : real * real  -> real
        val cos : real  -> real
        val cosh : real  -> real
        val e : real
        val exp : real  -> real
        val ln : real  -> real
        val log10 : real  -> real
        val pi : real
        val pow : real * real  -> real
        val sin : real  -> real
        val sinh : real  -> real
        val sqrt : real  -> real
        val tan : real  -> real
        val tanh : real  -> real
      end
  end
#

(補足)

  • SML#コンパイラのバージョンによっては、型がrealではなく、Math.realと表示されることもあるが、同一の型である。
  • Realの中には、さらにMathライブラリが含まれている。このライブラリは、Real.Math.sinのようにして参照できる。

sinなどの代表的な関数は、その名前と型から使用法が理解できるであろう。それ以外の関数の正確な仕様は、Standard ML Basis Libraryのドキュメントに記述されている。以下、円の面積を求める関数定義の例である。

# fun areaOfCircle r = Real.Math.pi * r * r;
val areaOfCircle = fn : real  -> real
# areaOfCircle 10.0;
val it = 314.159265359 : real

[ トップ | 目次 | 前ページ | 次ページ ]

Last modified:2007/05/10 11:56:29
Keyword(s):
References:[(15)[ML] 基本データ型と基本演算]