math.Abs仅支持float64,传入整数编译失败;int64需用math.Abs64;整数绝对值宜用条件判断或泛型函数,避免浮点转换;math包专注浮点计算,整数运算需自行兜底。

math.Abs 和 math.Abs64 用错类型会 panic
Go 的 math.Abs 只接受 float64,传入整数会编译失败;想对 int64 取绝对值,得用 math.Abs64。常见错误是直接传 int 或 int32,结果编译报 cannot use ... (type int) as type float64。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 整数取绝对值优先用标准库的
int类型内置逻辑(如if x ),避免类型转换开销 - 必须用
math时,确认输入类型:math.Abs(float64(x))或math.Abs64(int64(x)) -
math.Abs32存在但极少用,除非明确处理float32精度场景
math.Pow 计算整数幂容易精度丢失
math.Pow 底数和指数都为 float64,返回仍是 float64。即使计算 2^10 这种整数结果,也可能因浮点误差变成 1023.9999999999999,再转 int 就出错。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 小整数幂(比如幂 ≤ 64)直接手写乘法或用循环,避免浮点介入
- 需要通用幂运算且结果必须精确整数时,用
big.Int.Exp替代 - 若坚持用
math.Pow,记得加math.Round再转整型:int(math.Round(math.Pow(2, 10)))
math.Sqrt 对负数返回 NaN,不 panic
math.Sqrt(-1) 不会 panic,而是返回 NaN。后续如果拿这个结果做比较(如 ==)、转整型或参与其他运算,可能静默出错——比如 int(math.Sqrt(-1)) 得到 0,但没人知道它本应失败。
PHP是一种功能强大的网络程序设计语言,而且易学易用,移植性和可扩展性也都非常优秀,本书将为读者详细介绍PHP编程。 全书分为预备篇、开始篇和加速篇三大部分,共9章。预备篇主要介绍一些学习PHP语言的预备知识以及PHP运行平台的架设;开始篇则较为详细地向读者介绍PKP语言的基本语法和常用函数,以及用PHP如何对MySQL数据库进行操作;加速篇则通过对典型实例的介绍来使读者全面掌握PHP。 本书
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 调用前手动检查参数:
if x - 用
math.IsNaN检查返回值是否异常,尤其在链式计算中 - 注意
math.Sqrt对+Inf返回+Inf,对0返回0,这些边界行为要纳入测试用例
math.Max/Min 不支持泛型,需手动适配类型
Go 1.18+ 虽有泛型,但 math.Max 和 math.Min 仍只支持 float64。想比较两个 int?不能直接用,得自己写或转成 float64 再转回——但大整数可能溢出。
实操建议:
立即学习“go语言免费学习笔记(深入)”;
- 简单场景直接内联比较:
if a > b { return a } else { return b } - 高频使用可封装泛型函数:
func Max[T constraints.Ordered](a, b T) T { if a > b { return a } return b } - 避免无谓转换:不要写
int(math.Max(float64(a), float64(b))),整数比较不需要浮点路径
math 包不是“万能数学工具箱”,它专注浮点数值计算,很多看似基础的操作(比如整数最大值、安全开方)需要开发者主动兜底。最容易被忽略的是:它不报错,只是悄悄返回 NaN 或 Inf,而这些值在下游逻辑里可能一路畅通无阻地造成数据污染。









