6.17. kink/NUM_DIV¶
6.17.1. num_div型¶
num_divは (Dividend, Divisor) の組である。ここで、Dividendはnum値、Divisorは非0のnum値である。num_div値は、DividendをDivisorで割った除算を表す。
通常num_div値は、Num.op_divメソッドやNum.roundメソッドで作られる。
例
:NUM_DIV.require_from('kink/')
stdout.print_line(NUM_DIV.new(10 3).ceil(3).repr) # => 0.334
stdout.print_line(NUM_DIV.new(10 3).floor(3).repr) # => 0.333
stdout.print_line((10 / 3).ceil(3).repr) # => 0.334
stdout.print_line((10 / 3).floor(3).repr) # => 0.333
stdout.print_line(1.23456.round.ceil(3).repr) # => 1.235
stdout.print_line(1.23456.round.floor(3).repr) # => 1.234
6.17.1.1. Num_div.dividend¶
dividendは、Dividend属性を戻す。
例
:D <- 1.2 / 3.4
stdout.print_line(D.dividend.repr) # => 1.2
6.17.1.2. Num_div.divisor¶
divisorは、Divisor属性を戻す。
例
:D <- 1.2 / 3.4
stdout.print_line(D.divisor.repr) # => 3.4
6.17.1.3. Num_div.ceil(Scale)¶
ceilは、除算の結果を正の無限大に向けて丸める。
結果は、除算の結果の実数以上で、与えられたScaleを持つ最小のnum値である。
事前条件
Scaleは整数のnumでなければならない。
例
stdout.print_line((-0.16).round.ceil(1).repr) # => (-0.1)
stdout.print_line((-0.15).round.ceil(1).repr) # => (-0.1)
stdout.print_line((-0.14).round.ceil(1).repr) # => (-0.1)
stdout.print_line((-0.06).round.ceil(1).repr) # => 0.0
stdout.print_line((-0.05).round.ceil(1).repr) # => 0.0
stdout.print_line((-0.04).round.ceil(1).repr) # => 0.0
stdout.print_line(0.04.round.ceil(1).repr) # => 0.1
stdout.print_line(0.05.round.ceil(1).repr) # => 0.1
stdout.print_line(0.06.round.ceil(1).repr) # => 0.1
stdout.print_line(0.14.round.ceil(1).repr) # => 0.2
stdout.print_line(0.15.round.ceil(1).repr) # => 0.2
stdout.print_line(0.16.round.ceil(1).repr) # => 0.2
6.17.1.4. Num_div.floor(Scale)¶
floorは、除算の結果を負の無限大に向けて丸める。
結果は、除算の結果の実数以下で、与えられたScaleを持つ最大のnum値である。
事前条件
Scaleは整数のnumでなければならない。
例
stdout.print_line((-0.16).round.floor(1).repr) # => (-0.2)
stdout.print_line((-0.15).round.floor(1).repr) # => (-0.2)
stdout.print_line((-0.14).round.floor(1).repr) # => (-0.2)
stdout.print_line((-0.06).round.floor(1).repr) # => (-0.1)
stdout.print_line((-0.05).round.floor(1).repr) # => (-0.1)
stdout.print_line((-0.04).round.floor(1).repr) # => (-0.1)
stdout.print_line(0.04.round.floor(1).repr) # => 0.0
stdout.print_line(0.05.round.floor(1).repr) # => 0.0
stdout.print_line(0.06.round.floor(1).repr) # => 0.0
stdout.print_line(0.14.round.floor(1).repr) # => 0.1
stdout.print_line(0.15.round.floor(1).repr) # => 0.1
stdout.print_line(0.16.round.floor(1).repr) # => 0.1
6.17.1.5. Num_div.half_ceil(Scale)¶
half_ceilは、除算の結果を、与えられたScaleを持つもっとも近いnumに向けて丸め、半数は正の無限大の方向に丸める。
結果は、与えられたScaleを持つnum値のうち、除算の結果の実数に最も近い値である。そのようなnum値がふたつある場合、大きい方が戻る。
事前条件
Scaleは整数のnumでなければならない。
例
stdout.print_line((-0.16).round.half_ceil(1).repr) # => (-0.2)
stdout.print_line((-0.15).round.half_ceil(1).repr) # => (-0.1)
stdout.print_line((-0.14).round.half_ceil(1).repr) # => (-0.1)
stdout.print_line((-0.06).round.half_ceil(1).repr) # => (-0.1)
stdout.print_line((-0.05).round.half_ceil(1).repr) # => 0.0
stdout.print_line((-0.04).round.half_ceil(1).repr) # => 0.0
stdout.print_line(0.04.round.half_ceil(1).repr) # => 0.0
stdout.print_line(0.05.round.half_ceil(1).repr) # => 0.1
stdout.print_line(0.06.round.half_ceil(1).repr) # => 0.1
stdout.print_line(0.14.round.half_ceil(1).repr) # => 0.1
stdout.print_line(0.15.round.half_ceil(1).repr) # => 0.2
stdout.print_line(0.16.round.half_ceil(1).repr) # => 0.2
6.17.1.6. Num_div.half_floor(Scale)¶
half_floorは、除算の結果を、与えられたScaleを持つもっとも近いnumに向けて丸め、半数は負の無限大の方向に丸める。
結果は、与えられたScaleを持つnum値のうち、除算の結果の実数に最も近い値である。そのようなnum値がふたつある場合、小さい方が戻る。
事前条件
Scaleは整数のnumでなければならない。
例
stdout.print_line((-0.16).round.half_floor(1).repr) # => (-0.2)
stdout.print_line((-0.15).round.half_floor(1).repr) # => (-0.2)
stdout.print_line((-0.14).round.half_floor(1).repr) # => (-0.1)
stdout.print_line((-0.06).round.half_floor(1).repr) # => (-0.1)
stdout.print_line((-0.05).round.half_floor(1).repr) # => (-0.1)
stdout.print_line((-0.04).round.half_floor(1).repr) # => 0.0
stdout.print_line(0.04.round.half_floor(1).repr) # => 0.0
stdout.print_line(0.05.round.half_floor(1).repr) # => 0.0
stdout.print_line(0.06.round.half_floor(1).repr) # => 0.1
stdout.print_line(0.14.round.half_floor(1).repr) # => 0.1
stdout.print_line(0.15.round.half_floor(1).repr) # => 0.1
stdout.print_line(0.16.round.half_floor(1).repr) # => 0.2
6.17.1.7. Num_div.half_even(Scale)¶
half_evenは、除算の結果に対して銀行丸めを適用する。
結果は、与えられたScaleを持つnum値のうち、除算の結果の実数に最も近い値である。そのようなnum値がふたつある場合、偶数のMantissaを持つ方が戻る。
事前条件
Scaleは整数のnumでなければならない。
例
stdout.print_line((-0.16).round.half_even(1).repr) # => (-0.2)
stdout.print_line((-0.15).round.half_even(1).repr) # => (-0.2)
stdout.print_line((-0.14).round.half_even(1).repr) # => (-0.1)
stdout.print_line((-0.06).round.half_even(1).repr) # => (-0.1)
stdout.print_line((-0.05).round.half_even(1).repr) # => 0.0
stdout.print_line((-0.04).round.half_even(1).repr) # => 0.0
stdout.print_line(0.04.round.half_even(1).repr) # => 0.0
stdout.print_line(0.05.round.half_even(1).repr) # => 0.0
stdout.print_line(0.06.round.half_even(1).repr) # => 0.1
stdout.print_line(0.14.round.half_even(1).repr) # => 0.1
stdout.print_line(0.15.round.half_even(1).repr) # => 0.2
stdout.print_line(0.16.round.half_even(1).repr) # => 0.2
6.17.2. NUM_DIV.new(Dividend Divisor)¶
newは、 (Dividend, Divisor) のnum_div値を戻す。
事前条件
Dividendはnumでなければならない。
Divisorはnumでなければならない。
Divisorは0に等しくてはならない。
例
:NUM_DIV.require_from('kink/')
stdout.print_line(NUM_DIV.new(10 3).ceil(3).repr) # => 0.334
stdout.print_line(NUM_DIV.new(10 3).floor(3).repr) # => 0.333
6.17.3. NUM_DIV.is?(Val)¶
is?は、Valがnum_div値かどうかを戻す。