Функция math.Remainder
Функция math.Remainder вычисляет остаток от деления двух чисел с плавающей точкой.
В отличие от функции math.Mod, которая просто отбрасывает дробную часть частного,
math.Remainder округляет частное до ближайшего целого числа.
Это делает результат симметричным относительно нуля и часто используется в тригонометрических
и циклических вычислениях. Первым параметром передается делимое (x),
вторым — делитель (y).
Синтаксис
math.Remainder(x, y float64) float64
Функция принимает два аргумента типа float64 и возвращает значение типа float64.
Результат вычисляется по формуле: x - y * round(x / y), где round округляет до ближайшего целого.
Если делитель равен нулю, функция возвращает NaN.
Если результат равен нулю, он возвращается с положительным знаком.
Пример с положительными числами
Рассмотрим базовый пример с положительными числами:
package main
import (
"fmt"
"math"
)
func main() {
res := math.Remainder(10.0, 3.0)
fmt.Println(res)
}
Результат выполнения кода:
1
Здесь частное 10/3 ≈ 3.333 округляется до 3, и остаток вычисляется как 10 - 3*3 = 1.
Пример с отрицательными числами
Проверим работу функции с отрицательным делимым:
package main
import (
"fmt"
"math"
)
func main() {
res := math.Remainder(-10.0, 3.0)
fmt.Println(res)
}
Результат выполнения кода:
-1
Частное -10/3 ≈ -3.333 округляется до -3, остаток: -10 - 3*(-3) = -1. Результат имеет знак делимого, что характерно для данного подхода.
Пример с округлением до ближайшего целого
Продемонстрируем случай, когда частное округляется в большую сторону:
package main
import (
"fmt"
"math"
)
func main() {
res := math.Remainder(7.0, 4.0)
fmt.Println(res)
}
Результат выполнения кода:
-1
Частное 7/4 = 1.75 округляется до 2, остаток: 7 - 4*2 = -1. Обратите внимание, что результат может быть отрицательным, даже если оба числа положительны, из-за округления в большую сторону.
Пример с нулевым делителем
Посмотрим, что произойдет при делении на ноль:
package main
import (
"fmt"
"math"
)
func main() {
res := math.Remainder(5.0, 0.0)
fmt.Println(res)
}
Результат выполнения кода:
NaN
При делении на ноль функция возвращает math.NaN() (Not-a-Number),
что соответствует математической неопределенности.
Смотрите также
-
функцию
math.Mod,
которая вычисляет остаток от деления с отбрасыванием дробной части частного -
функцию
math.Modf,
которая разбивает число на целую и дробную части -
функцию
math.Floor,
которая округляет число вниз до ближайшего целого -
функцию
math.Ceil,
которая округляет число вверх до ближайшего целого