Go/算術演算と数学関数
算術演算
編集加減乗除
編集足し算や割り算などといった数式を用いた形式の四則演算は、他の一般的なプログラミング言語と同様に、Goでも可能です。
- コード例
package main import "fmt" func main() { fmt.Println("5 + 3 =", 5+3) fmt.Println("5 - 3 =", 5-3) fmt.Println("5 * 3 =", 5*3) fmt.Println("5 / 3 =", 5/3) fmt.Println("5 % 3 =", 5%3) }
- 実行結果
5 + 3 = 8 5 - 3 = 2 5 * 3 = 15 5 / 3 = 1 5 % 3 = 2
- コード例
package main import "fmt" func main() { fmt.Println("5 / 3 =", 5/3) fmt.Println("5.0 / 3.0 =", 5.0/3.0) fmt.Println("5.0 / 3 =", 5.0/3) fmt.Println("5 / 3.0 =", 5/3.0) }
- 実行結果
5 / 3 = 1 5.0 / 3.0 = 1.6666666666666667 5.0 / 3 = 1.6666666666666667 5 / 3.0 = 1.6666666666666667
5.0 のように小数点がついたリテラルは浮動小数型です。 数値リテラル同士の二項演算では、片方の項が浮動小数点型だと他方の項を浮動小数点型に昇格してから演算します。
- コード例
package main import "fmt" func main() { i5, i3 := 5, 3 f5, f3 := 5.0, 3.0 fmt.Println("5 / 3 =", i5/i3) fmt.Println("5.0 / 3.0 =", f5/f3) fmt.Println("5.0 / 3 =", f5/i3) fmt.Println("5 / 3.0 =", i5/f3) }
- コンパイル結果
# command-line-arguments ./Main.go:9:35: invalid operation: f5 / i3 (mismatched types float64 and int) ./Main.go:10:37: invalid operation: i5 / f3 (mismatched types int and float64)
数値リテラルの場合と異なり、変数同士の演算では両辺の型は一致している必要があります。
数値リテラルと変数で挙動が異なり、これは変数宣言時の初期値に於いても言えることに注意してください。
もし明示的に浮動小数点型を宣言する場合は、32ビット幅の浮動小数型 float32か、64ビット幅の浮動小数型 float64 のいずれかを使います。単なる float という型はありません。
ここでいう32ビットや64ビットというのはプロセッサーのビット数とは無関係です。32ビットコンピューターでも問題なく64ビット精度の型を使えます。
- コード例
package main import "fmt" func main() { fmt.Printf("type of %d is %T\n", 5, 5) fmt.Printf("type of %f is %T\n", 5.0, 5.0) }
- 実行結果
type of 5 is int type of 5.000000 is float64
%d と %f は、C言語の printf() でおなじみですが、Goの fmt.Printf() では %T で型を表示できます。
数学関数
編集Goでは、三角関数などの数学関数は mathパッケージで定義されています。
- コード例
package main import "fmt" import "math" func main() { fmt.Printf("math.Cos(Math.Pi) = %f\n", math.Cos(math.Pi)) }
- 実行結果
math.Cos(Math.Pi) = -1.000000
- 解説
Goでは mathパッケージの関数で扱う浮動小数型の値はfloat64です。もし float32 を引数にして呼び出すと
./Main.go:8:25: cannot use variableP (type float32) as type float64 in argument to math.Cos
のようにエラーになります。
Goにかぎらず、C言語など多くのプログラム言語での三角関数の単位は、Radian(ラジアン;弧度法)です。 Goでは Cos や Sin など、外部参照可能な識別子名は大文字ではじまります。 同様に、円周率πもmathパッケージで定義されており、math.Pi で参照できます。これも大文字の頭文字で「Pi」と書きます。
パッケージをインポートするもう一つの構文では
import ( "fmt" "math" )
のようにパッケージ名を ( ) で囲ったリストの形で書きます。