51 / 68

math

math paketi

math — matematik hisob-kitoblar (ildiz olish, daraja, yaxlitlash, trigonometriya va h.k.) uchun mo'ljallangan standart paket. Deyarli barcha funksiyalar float64 turi bilan ishlaydi.

example.go
import "math"

1. Kvadrat ildiz va daraja: Sqrt() va Pow()

example.go
package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Sqrt(64))  // kvadrat ildiz
    fmt.Println(math.Pow(2, 10)) // 2 ning 10-darajasi
}

Natija:

kod
8
1024

[!NOTE] math.Sqrt() va math.Pow() har doim float64 qaytaradi — hatto natija butun son bo'lsa ham (8 emas, 8.0). Agar natijani int sifatida ishlatish kerak bo'lsa, uni aniq turga aylantiring: int(math.Sqrt(64)).


2. Absolyut qiymat, eng katta va eng kichigi: Abs(), Max(), Min()

example.go
package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Abs(-15.5)) // manfiy belgisini olib tashlaydi
    fmt.Println(math.Max(10, 20))
    fmt.Println(math.Min(10, 20))
}

Natija:

kod
15.5
20
10

[!IMPORTANT] math.Max()/math.Min() faqat ikkita float64 qiymat bilan ishlaydi (uchtadan ortiq son yoki slays bilan emas). Agar slaysdagi eng katta/eng kichik elementni topish kerak bo'lsa, slices.Max()/slices.Min() funksiyalaridan foydalaning — bu haqda slices paketiga bag'ishlangan darsda gaplashamiz. Go 1.21 dan boshlab, oddiy sonlar uchun esa tilning o'zida mavjud bo'lgan max() va min() o'rnatilgan funksiyalarini ham ishlatish mumkin: max(10, 20, 5).


3. Yaxlitlash: Round(), Floor(), Ceil(), Trunc()

example.go
package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Round(4.5)) // eng yaqin butun songa yaxlitlaydi
    fmt.Println(math.Floor(4.9)) // pastga yaxlitlaydi (kichraytiradi)
    fmt.Println(math.Ceil(4.1))  // yuqoriga yaxlitlaydi (kattalashtiradi)
    fmt.Println(math.Trunc(4.7)) // kasr qismini shunchaki kesib tashlaydi
}

Natija:

kod
5
4
5
4
FunksiyaVazifasi4.7 uchun-4.7 uchun
Round()eng yaqin butun songa5-5
Floor()pastga (kichikroq tomonga)4-5
Ceil()yuqoriga (kattaroq tomonga)5-4
Trunc()kasr qismini kesish4-4

4. Qoldiqli bo'lish (kasr sonlar uchun): Mod()

Oddiy % operatori faqat butun sonlar bilan ishlaydi. Kasr sonlar uchun qoldiqni topish kerak bo'lsa, math.Mod() ishlatiladi:

example.go
package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Mod(10, 3))
}

Natija:

kod
1

5. Tayyor konstantalar: Pi, E, MaxInt64 va h.k.

math paketida tez-tez kerak bo'ladigan matematik konstantalar ham oldindan tayyorlab qo'yilgan:

example.go
package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Pi)       // π soni
    fmt.Println(math.MaxInt64) // int64 turi qabul qiladigan eng katta son
    fmt.Println(math.MaxInt32) // int32 turi qabul qiladigan eng katta son
}

Natija:

kod
3.141592653589793
9223372036854775807
2147483647

6. Cheksizlik va "son emas" qiymati: Inf() va NaN()

Ba'zi hisob-kitoblar (masalan, 0ga bo'lish kasr sonlarda) natijasi "cheksizlik" yoki "son emas" (NaN — Not a Number) bo'lishi mumkin. Bularni tekshirish uchun:

example.go
package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Inf(1)) // musbat cheksizlik (+Inf); -1 bo'lsa -Inf

    result := math.NaN()
    fmt.Println(math.IsNaN(result)) // result "son emas"ligini tekshiradi
}

Natija:

kod
+Inf
true

7. Logarifm, kub ildiz va boshqa funksiyalar

example.go
package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Log(math.E))   // natural logarifm (asosi e)
    fmt.Println(math.Log10(1000))   // 10 asosli logarifm
    fmt.Println(math.Cbrt(27))      // kub ildiz
}

Natija:

kod
1
3
3

math paketida bulardan tashqari trigonometrik funksiyalar (Sin(), Cos(), Tan()) ham mavjud — ular ko'proq grafika, geometriya yoki fizik hisob-kitoblarda kerak bo'ladi.


Xulosa: qachon qaysi funksiya kerak?

VazifaFunksiya
Kvadrat ildiz / darajamath.Sqrt() / math.Pow()
Manfiy belgini olib tashlashmath.Abs()
Ikkita sondan katta/kichigimath.Max() / math.Min() (yoki Go 1.21+ max()/min())
Yaxlitlashmath.Round(), Floor(), Ceil()
Kasr sonda qoldiqni topishmath.Mod()
Cheksizlik/NaN tekshirishmath.IsInf() / math.IsNaN()