Функция math.Remainder

Функция math.Remainder вычисляет остаток от деления двух чисел с плавающей точкой. В отличие от функции math.Mod, которая просто отбрасывает дробную часть частного, math.Remainder округляет частное до ближайшего целого числа. Это делает результат симметричным относительно нуля и часто используется в тригонометрических и циклических вычислениях. Первым параметром передается делимое (x), вторым — делитель (y).

Синтаксис

gomath.Remainder(x, y float64) float64

Функция принимает два аргумента типа float64 и возвращает значение типа float64. Результат вычисляется по формуле: x - y * round(x / y), где round округляет до ближайшего целого. Если делитель равен нулю, функция возвращает NaN. Если результат равен нулю, он возвращается с положительным знаком.

Пример с положительными числами

Рассмотрим базовый пример с положительными числами:

gopackage main

import (
  "fmt"
  "math"
)

func main() {
  res := math.Remainder(10.0, 3.0)
  fmt.Println(res)
}

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

go1

Здесь частное 10/3 ≈ 3.333 округляется до 3, и остаток вычисляется как 10 - 3*3 = 1.

Пример с отрицательными числами

Проверим работу функции с отрицательным делимым:

gopackage main

import (
  "fmt"
  "math"
)

func main() {
  res := math.Remainder(-10.0, 3.0)
  fmt.Println(res)
}

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

go-1

Частное -10/3 ≈ -3.333 округляется до -3, остаток: -10 - 3*(-3) = -1. Результат имеет знак делимого, что характерно для данного подхода.

Пример с округлением до ближайшего целого

Продемонстрируем случай, когда частное округляется в большую сторону:

gopackage main

import (
  "fmt"
  "math"
)

func main() {
  res := math.Remainder(7.0, 4.0)
  fmt.Println(res)
}

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

go-1

Частное 7/4 = 1.75 округляется до 2, остаток: 7 - 4*2 = -1. Обратите внимание, что результат может быть отрицательным, даже если оба числа положительны, из-за округления в большую сторону.

Пример с нулевым делителем

Посмотрим, что произойдет при делении на ноль:

gopackage main

import (
  "fmt"
  "math"
)

func main() {
  res := math.Remainder(5.0, 0.0)
  fmt.Println(res)
}

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

goNaN

При делении на ноль функция возвращает math.NaN() (Not-a-Number), что соответствует математической неопределенности.

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

  • функцию math.Mod,
    которая вычисляет остаток от деления с отбрасыванием дробной части частного
  • функцию math.Modf,
    которая разбивает число на целую и дробную части
  • функцию math.Floor,
    которая округляет число вниз до ближайшего целого
  • функцию math.Ceil,
    которая округляет число вверх до ближайшего целого