SML# - Tutorial/014-3 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

[ [[トップ |Tutorial]]| [[目次|Tutorial/000]] | [[前ページ|Tutorial/014]] | [[ 次ページ |Tutorial/015]] ]
----
!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型の基本操作(対話型環境に定義済み)
||!式||!意味||
||~ r||rの-1.0倍||
|| a + b||aとbの和||
|| a - b||aとbの差||
|| a * d||aとbの積||
|| a / d||aとbの商||
|| a > b||a > bの時true||
|| a < b||a < bの時true||
|| a >= b||a >= bの時true||
|| a <= b||a <= bの時true||
|| abs r||rの絶対値||
|| real n||int型の数nのreal型への変換||
|| floor r||r以下の最大の整数||
|| ceil r||r以上の最小の整数||
|| round r||rを絶対値の小さい方に丸めた整数||
|| trunc r||rの少数部分の切り捨てた整数||


!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
----
[ [[トップ |Tutorial]]| [[目次|Tutorial/000]] | [[前ページ|Tutorial/014]] | [[ 次ページ |Tutorial/015]] ]