math
math là thư viện thao tác toán học cơ bản trong Go, cũng là thư viện bắt buộc phải thành thạo và sử dụng.
Hằng số nguyên
go
const (
intSize = 32 << (^uint(0) >> 63) // 32 or 64
MaxInt = 1<<(intSize-1) - 1
MinInt = -1 << (intSize - 1)
MaxInt8 = 1<<7 - 1
MinInt8 = -1 << 7
MaxInt16 = 1<<15 - 1
MinInt16 = -1 << 15
MaxInt32 = 1<<31 - 1
MinInt32 = -1 << 31
MaxInt64 = 1<<63 - 1
MinInt64 = -1 << 63
MaxUint = 1<<intSize - 1
MaxUint8 = 1<<8 - 1
MaxUint16 = 1<<16 - 1
MaxUint32 = 1<<32 - 1
MaxUint64 = 1<<64 - 1
)Hằng số dấu phẩy động
go
const (
MaxFloat32 = 0x1p127 * (1 + (1 - 0x1p-23)) // 3.40282346638528859811704183484516925440e+38
SmallestNonzeroFloat32 = 0x1p-126 * 0x1p-23 // 1.401298464324817070923729583289916131280e-45
MaxFloat64 = 0x1p1023 * (1 + (1 - 0x1p-52)) // 1.79769313486231570814527423731704356798070e+308
SmallestNonzeroFloat64 = 0x1p-1022 * 0x1p-52 // 4.9406564584124654417656879286822137236505980e-324
)Hằng số toán học
go
const (
E = 2.71828182845904523536028747135266249775724709369995957496696763 // https://oeis.org/A001113
Pi = 3.14159265358979323846264338327950288419716939937510582097494459 // https://oeis.org/A000796
Phi = 1.61803398874989484820458683436563811772030917980576286213544862 // https://oeis.org/A001622
Sqrt2 = 1.41421356237309504880168872420969807856967187537694807317667974 // https://oeis.org/A002193
SqrtE = 1.64872127070012814684865078781416357165377610071014801157507931 // https://oeis.org/A019774
SqrtPi = 1.77245385090551602729816748334114518279754945612238712821380779 // https://oeis.org/A002161
SqrtPhi = 1.27201964951406896425242246173749149171560804184009624861664038 // https://oeis.org/A139339
Ln2 = 0.693147180559945309417232121458176568075500134360255254120680009 // https://oeis.org/A002162
Log2E = 1 / Ln2
Ln10 = 2.30258509299404568401799145468436420760110148862877297603332790 // https://oeis.org/A002392
Log10E = 1 / Ln10
)Giá trị lớn nhất
go
func TestMax(t *testing.T) {
fmt.Println(math.Max(1.0, 2.0))
}=== RUN TestMax
2
--- PASS: TestMax (0.00s)
PASSGiá trị nhỏ nhất
go
func TestMin(t *testing.T) {
fmt.Println(math.Min(1.0, 2.0))
}=== RUN TestMin
1
--- PASS: TestMin (0.00s)
PASSGiá trị tuyệt đối
go
func TestAbs(t *testing.T) {
fmt.Println(math.Abs(-1))
}=== RUN TestAbs
1
--- PASS: TestAbs (0.00s)
PASSSố dư
go
func TestMod(t *testing.T) {
fmt.Println(math.Mod(1, 10))
fmt.Println(math.Mod(12, 10))
}=== RUN TestMod
1
2
--- PASS: TestMod (0.00s)
PASSKiểm tra Nan
go
func TestName(t *testing.T) {
fmt.Println(math.IsNaN(math.NaN()))
}=== RUN TestFloor
2
--- PASS: TestFloor (0.00s)
PASSKiểm tra Inf
go
func TestInf(t *testing.T) {
fmt.Println(math.IsInf(1.0, 1))
fmt.Println(math.IsInf(math.Inf(-1), -1))
}=== RUN TestInf
false
true
--- PASS: TestInf (0.00s)
PASSLàm tròn
go
func TestTrunc(t *testing.T) {
fmt.Println(math.Trunc(1.26))
fmt.Println(math.Trunc(2.3333))
}=== RUN TestTrunc
1
2
--- PASS: TestTrunc (0.00s)
PASSLàm tròn xuống
go
func TestFloor(t *testing.T) {
fmt.Println(math.Floor(2.5))
}=== RUN TestFloor
2
--- PASS: TestFloor (0.00s)
PASSLàm tròn lên
go
func TestCeil(t *testing.T) {
fmt.Println(math.Ceil(2.5))
}=== RUN TestCeil
3
--- PASS: TestCeil (0.00s)
PASSLàm tròn tứ nhập ngũ nhập
go
func TestRound(t *testing.T) {
fmt.Println(math.Round(1.2389))
fmt.Println(math.Round(-5.2389))
}=== RUN TestRound
1
-5
--- PASS: TestRound (0.00s)
PASSTính logarit
go
func TestLog(t *testing.T) {
fmt.Println(math.Log(100) / math.Log(10))
fmt.Println(math.Log(1) / math.Log(2))
}=== RUN TestLog
2
0
--- PASS: TestLog (0.00s)
PASSLũy thừa của E
go
func TestEx(t *testing.T) {
fmt.Println(math.Exp(2))
}=== RUN TestEx
7.38905609893065
--- PASS: TestEx (0.00s)
PASSLũy thừa
go
func TestPow(t *testing.T) {
fmt.Println(math.Pow(2, 3))
fmt.Println(math.Pow(3, 3))
}=== RUN TestPow
8
27
--- PASS: TestPow (0.00s)
PASSCăn bậc hai
go
func TestSqrt(t *testing.T) {
fmt.Println(math.Sqrt(4))
}=== RUN TestSqrt
2
--- PASS: TestSqrt (0.00s)
PASSCăn bậc ba
go
func TestCube(t *testing.T) {
fmt.Println(math.Cbrt(8))
fmt.Println(math.Cbrt(27))
}=== RUN TestCube
2
3
--- PASS: TestCube (0.00s)
PASSCăn bậc N
go
func TestN(t *testing.T) {
fmt.Println(math.Round(math.Pow(8, 1.0/3)))
fmt.Println(math.Round(math.Pow(100, 1.0/2)))
}=== RUN TestN
2
10
--- PASS: TestN (0.00s)
PASSSin
go
func TestSin(t *testing.T) {
fmt.Println(math.Sin(0))
fmt.Println(math.Sin(20))
}=== RUN TestSin
0
0.9129452507276277
--- PASS: TestSin (0.00s)
PASSCos
go
func TestCos(t *testing.T) {
fmt.Println(math.Cos(0))
fmt.Println(math.Cos(20))
}=== RUN TestCos
1
0.40808206181339196
--- PASS: TestCos (0.00s)
PASSTan
go
func TestTan(t *testing.T) {
fmt.Println(math.Tan(0))
fmt.Println(math.Tan(20))
}=== RUN TestTan
0
2.2371609442247427
--- PASS: TestTan (0.00s)
PASSTIP
Gói math không chỉ có các hàm trên, nhưng đã đủ để đáp ứng nhu cầu sử dụng hàng ngày, nếu cần tìm hiểu sâu, có thể tự đọc mã nguồn.
