Documentation
¶
Overview ¶
パッケージ arith は int32, float64, Rat ("math/big" の無限多倍長有理数) の自動的な相互変換を伴う算術演算を実装する. int32 の演算を内部的に int64 で行うことで桁あふれ時の Rat への自動的な 変換を実現する.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Compare ¶
比較: a, b について a が b に対して小さい/等しい/大きいとき, それぞれ -1/0/1 を返す。Compare(7, 2) => 1
Example ¶
r := Compare(7, 7) Printf("%T %v\n", r, r) r = Compare(7, 2) Printf("%T %v\n", r, r) r = Compare(2, 7) Printf("%T %v\n", r, r) r = Compare(7, 2.0) Printf("%T %v\n", r, r) r = Compare(7, NewRat(2, 1)) Printf("%T %v\n", r, r) r = Compare(7.0, 2) Printf("%T %v\n", r, r) r = Compare(7.0, 2.0) Printf("%T %v\n", r, r) r = Compare(7.0, NewRat(2, 1)) Printf("%T %v\n", r, r) r = Compare(NewRat(7, 1), 2) Printf("%T %v\n", r, r) r = Compare(NewRat(7, 1), 2.0) Printf("%T %v\n", r, r) r = Compare(NewRat(7, 1), 7) Printf("%T %v\n", r, r) r = Compare(NewRat(7, 2), NewRat(2, 3)) Printf("%T %v\n", r, r) r = Compare(NewRat(2, 3), NewRat(7, 2)) Printf("%T %v\n", r, r)
Output: int 0 int 1 int -1 int 1 int 1 int 1 int 1 int 1 int 1 int 1 int 0 int 1 int -1
func Float64 ¶
数を浮動小数点数にした値を返す。Float64(7) => 7.0
Example ¶
r := Float64(7) Printf("%T %v\n", r, r) r = Float64(7.0) Printf("%T %v\n", r, r) r = Float64(NewRat(7, 1)) Printf("%T %v\n", r, r) r = Float64(NewRat(-7, 2)) Printf("%T %v\n", r, r)
Output: float64 7 float64 7 float64 7 float64 -3.5
func IsNumber ¶
func IsNumber(a interface{}) bool
int32, float64 または *Rat ならば true を返す。
Example ¶
Println(IsNumber(int32(7))) Println(IsNumber(7.0)) Println(IsNumber(NewRat(7, 2))) Println(IsNumber("7")) Println(IsNumber(int64(7)))
Output: true true true false false
func String ¶
数の文字列表現を得る。String(7.0) => "7.0"
Example ¶
r := String(7) Printf("%T %v\n", r, r) r = String(int32(7)) Printf("%T %v\n", r, r) r = String(int64(7)) Printf("%T %v\n", r, r) r = String(7.0) Printf("%T %v\n", r, r) r = String(NewRat(7, 1)) Printf("%T %v\n", r, r) r = String(NewRat(7, 2)) Printf("%T %v\n", r, r) r = String(7.2) Printf("%T %v\n", r, r) r = String(7e20) Printf("%T %v\n", r, r) r = String(-7.0) Printf("%T %v\n", r, r) r = String(-7.2) Printf("%T %v\n", r, r) z, _ := new(Rat).SetString("123456789012345678901234567890") r = String(z) Printf("%T %v\n", r, r)
Output: string 7 string 7 string 7 string 7.0 string 7 string 7/2 string 7.2 string 7e+20 string -7.0 string -7.2 string 123456789012345678901234567890
Types ¶
type Number ¶
type Number interface{}
Number は int32, float64 または *Rat を表す型であるとする (実際の型検査は実行時に行う)。 ただし,関数の引数としては便宜のため int, int64 も許す (それらは実行時の値によって int32 または *Rat へと変換される)。
Example (Factorial) ¶
var n Number = 1 for i := 1; i < 30; i++ { n = Multiply(n, i) Println(String(n)) }
Output: 1 2 6 24 120 720 5040 40320 362880 3628800 39916800 479001600 6227020800 87178291200 1307674368000 20922789888000 355687428096000 6402373705728000 121645100408832000 2432902008176640000 51090942171709440000 1124000727777607680000 25852016738884976640000 620448401733239439360000 15511210043330985984000000 403291461126605635584000000 10888869450418352160768000000 304888344611713860501504000000 8841761993739701954543616000000
func Add ¶
加算: Add(7, 2) => 9
Example ¶
r := Add(7, 2) Printf("%T %v\n", r, r) r = Add(7, 2.0) Printf("%T %v\n", r, r) r = Add(7, NewRat(2, 1)) Printf("%T %v\n", r, r) r = Add(7.0, 2) Printf("%T %v\n", r, r) r = Add(7.0, 2.0) Printf("%T %v\n", r, r) r = Add(7.0, NewRat(2, 1)) Printf("%T %v\n", r, r) r = Add(NewRat(7, 1), 2) Printf("%T %v\n", r, r) r = Add(NewRat(7, 1), 2.0) Printf("%T %v\n", r, r) r = Add(NewRat(7, 1), NewRat(2, 1)) Printf("%T %v\n", r, r) r = Add(NewRat(7, 2), NewRat(2, 3)) Printf("%T %v\n", r, r)
Output: int32 9 float64 9 int32 9 float64 9 float64 9 float64 9 int32 9 float64 9 int32 9 *big.Rat 25/6
func DivideInt ¶
整数除算: DivideInt(7, 2) => 3
Example ¶
r := DivideInt(7, 2) Printf("%T %v\n", r, r) r = DivideInt(7, 2.0) Printf("%T %v\n", r, r) r = DivideInt(7, NewRat(2, 1)) Printf("%T %v\n", r, r) r = DivideInt(7.0, 2) Printf("%T %v\n", r, r) r = DivideInt(7.0, 2.0) Printf("%T %v\n", r, r) r = DivideInt(7.0, NewRat(2, 1)) Printf("%T %v\n", r, r) r = DivideInt(NewRat(7, 1), 2) Printf("%T %v\n", r, r) r = DivideInt(NewRat(7, 1), 2.0) Printf("%T %v\n", r, r) r = DivideInt(NewRat(7, 1), NewRat(2, 1)) Printf("%T %v\n", r, r) r = DivideInt(NewRat(7, 2), NewRat(2, 3)) Printf("%T %v\n", r, r)
Output: int32 3 int32 3 int32 3 int32 3 int32 3 int32 3 int32 3 int32 3 int32 3 int32 5
func DivideReal ¶
実数除算: DivideReal(7, 2) => 7/2
Example ¶
r := DivideReal(7, 2) Printf("%T %v\n", r, r) r = DivideReal(7, 2.0) Printf("%T %v\n", r, r) r = DivideReal(7, NewRat(2, 1)) Printf("%T %v\n", r, r) r = DivideReal(7.0, 2) Printf("%T %v\n", r, r) r = DivideReal(7.0, 2.0) Printf("%T %v\n", r, r) r = DivideReal(7.0, NewRat(2, 1)) Printf("%T %v\n", r, r) r = DivideReal(NewRat(7, 1), 2) Printf("%T %v\n", r, r) r = DivideReal(NewRat(7, 1), 2.0) Printf("%T %v\n", r, r) r = DivideReal(NewRat(7, 1), NewRat(2, 1)) Printf("%T %v\n", r, r) r = DivideReal(NewRat(7, 2), NewRat(2, 3)) Printf("%T %v\n", r, r)
Output: *big.Rat 7/2 float64 3.5 *big.Rat 7/2 float64 3.5 float64 3.5 float64 3.5 *big.Rat 7/2 float64 3.5 *big.Rat 7/2 *big.Rat 21/4
func Multiply ¶
乗算: Multiply(7, 2) => 14
Example ¶
r := Multiply(7, 2) Printf("%T %v\n", r, r) r = Multiply(7, 2.0) Printf("%T %v\n", r, r) r = Multiply(7, NewRat(2, 1)) Printf("%T %v\n", r, r) r = Multiply(7.0, 2) Printf("%T %v\n", r, r) r = Multiply(7.0, 2.0) Printf("%T %v\n", r, r) r = Multiply(7.0, NewRat(2, 1)) Printf("%T %v\n", r, r) r = Multiply(NewRat(7, 1), 2) Printf("%T %v\n", r, r) r = Multiply(NewRat(7, 1), 2.0) Printf("%T %v\n", r, r) r = Multiply(NewRat(7, 1), NewRat(2, 1)) Printf("%T %v\n", r, r) r = Multiply(NewRat(7, 2), NewRat(2, 3)) Printf("%T %v\n", r, r)
Output: int32 14 float64 14 int32 14 float64 14 float64 14 float64 14 int32 14 float64 14 int32 14 *big.Rat 7/3
func Subtract ¶
減算: Subtract(7, 2) => 5
Example ¶
r := Subtract(7, 2) Printf("%T %v\n", r, r) r = Subtract(7, 2.0) Printf("%T %v\n", r, r) r = Subtract(7, NewRat(2, 1)) Printf("%T %v\n", r, r) r = Subtract(7.0, 2) Printf("%T %v\n", r, r) r = Subtract(7.0, 2.0) Printf("%T %v\n", r, r) r = Subtract(7.0, NewRat(2, 1)) Printf("%T %v\n", r, r) r = Subtract(NewRat(7, 1), 2) Printf("%T %v\n", r, r) r = Subtract(NewRat(7, 1), 2.0) Printf("%T %v\n", r, r) r = Subtract(NewRat(7, 1), NewRat(2, 1)) Printf("%T %v\n", r, r) r = Subtract(NewRat(7, 2), NewRat(2, 3)) Printf("%T %v\n", r, r)
Output: int32 5 float64 5 int32 5 float64 5 float64 5 float64 5 int32 5 float64 5 int32 5 *big.Rat 17/6
func Truncate ¶
数をゼロの方向へ丸めた整数を返す。Truncate(7.2) => 7
Example ¶
r := Truncate(7) Printf("%T %v\n", r, r) r = Truncate(int32(7)) Printf("%T %v\n", r, r) r = Truncate(int64(7)) Printf("%T %v\n", r, r) r = Truncate(7.0) Printf("%T %v\n", r, r) r = Truncate(NewRat(7, 1)) Printf("%T %v\n", r, r) r = Truncate(NewRat(7, 2)) Printf("%T %v\n", r, r) r = Truncate(NewRat(7000000000000, 2)) Printf("%T %v\n", r, r) r = Truncate(-3.5) Printf("%T %v\n", r, r) r = Truncate(NewRat(-7, 2)) Printf("%T %v\n", r, r) r = Truncate(2147483647.999) Printf("%T %v\n", r, r) r = Truncate(2147483648.000) Printf("%T %v\n", r, r) r = Truncate(-2147483648.999) Printf("%T %v\n", r, r) r = Truncate(-2147483649.000) Printf("%T %v\n", r, r) r = Truncate(math.Inf(1)) Printf("%T %v\n", r, r)
Output: int32 7 int32 7 int32 7 int32 7 int32 7 int32 3 *big.Rat 3500000000000/1 int32 -3 int32 -3 int32 2147483647 *big.Rat 2147483648/1 int32 -2147483648 *big.Rat -2147483649/1 float64 +Inf
Click to show internal directories.
Click to hide internal directories.