Короткий ответ: Go является преемником C, и стандартная математическая библиотека C также определяется почти исключительно в терминах значений с плавающей запятой одинарной и двойной точности.
Более длинный ответ заключается в том, что в статически типизированном языке без полиморфизма или перегрузки функций, таких как Go (или C), вам нужно выбрать тип для функции, которую нужно взять и вернуть заранее, и как только вы собираетесь иметь дело с Для определенных типов в вашей математической библиотеке, есть гораздо более интересные операции над числами с плавающей запятой, чем целые числа. Чтобы выбрать несколько примеров
квадратный или n-ный корень из целого числа или числа с плавающей запятой обычно не представляется как целое число
очень немногие интересные значения трансцендентных функций представляются в виде целых чисел
деление значений с плавающей запятой требует меньшего округления, чем деление целых чисел
Обратите внимание, что это не так обременительно, как может показаться, если ваши входные значения являются целыми числами - целочисленное значение может быть преобразовано в значение с плавающей запятой с простой типизацией и, в основном, точно.
Это история для таких языков, как Go или C. У других языков есть и другие варианты:
Динамически типизированный язык может предоставлять функции математической библиотеки, которые принимают или возвращают несколько типов в зависимости от того, как они вызываются, или от того, является ли возвращаемое значение представимым как целое число.
Язык с перегрузкой функций может предоставлять несколько версий одной и той же функции в зависимости от передаваемых вами типов (строго говоря, это несколько функций с одинаковым именем, в отличие от случая с динамически типизированным выше)
Язык с полиморфизмом типов (например, объектно-ориентированные языки с наследованием) может определять суперкласс «Число» с подклассами для целых чисел и значений с плавающей запятой, а затем определять математические функции в терминах этого класса Number. Этот подход имеет большую гибкость подхода динамического языка, сохраняя при этом большую часть строгости статического подхода или подхода с перегрузкой функций.
Однако у Go нет ни одной из этих функций.