Функция math.Nextafter

Функция math.Nextafter возвращает следующее представимое число с плавающей точкой после x в направлении y. В первый параметр мы передаем исходное число, во второй параметр мы передаем целевое число, в направлении которого будет выполняться поиск следующего представимого значения. Если x и y равны, функция возвращает x. Функция работает с типами float64 и возвращает значение того же типа.

Синтаксис

gomath.Nextafter(x, y float64) float64

Пример

Давайте найдем следующее представимое число после 1.0 в положительном направлении:

gopackage main

import (
  "fmt"
  "math"
)

func main() {
  res := math.Nextafter(1.0, 2.0)
  fmt.Println(res)
}

Результат выполнения кода:

go1.0000000000000002

Пример

Давайте найдем следующее представимое число после 1.0 в отрицательном направлении:

gopackage main

import (
  "fmt"
  "math"
)

func main() {
  res := math.Nextafter(1.0, 0.0)
  fmt.Println(res)
}

Результат выполнения кода:

go0.9999999999999999

Пример

Давайте сравним поведение функции при равных значениях в параметрах:

gopackage main

import (
  "fmt"
  "math"
)

func main() {
  res := math.Nextafter(3.14, 3.14)
  fmt.Println(res)
}

Результат выполнения кода:

go3.14

Пример

Давайте используем функцию для перебора чисел в цикле с шагом в одно представимое значение:

gopackage main

import (
  "fmt"
  "math"
)

func main() {
  x := 1.0
  for i := 0; i < 3; i++ {
    fmt.Printf("%.20f\n", x)
    x = math.Nextafter(x, 2.0)
  }
}

Результат выполнения кода:

go"1.00000000000000000000"
"1.00000000000000022204"
"1.00000000000000044409"

Смотрите также

  • функцию math.Pow,
    которая возводит число в степень
  • функцию math.Sqrt,
    которая вычисляет квадратный корень
  • функцию math.Abs,
    которая возвращает абсолютное значение числа
  • функцию math.Copysign,
    которая копирует знак одного числа в другое