math.sqrt()对负数报错因只支持非负实数,需用cmath.sqrt()处理复数;round()采用银行家舍入,floor/ceil为确定性取整;math.pi/e为双精度浮点值;log默认自然对数,换底应用log(x)/log(b)。

math.sqrt() 为什么对负数报错?
因为 math.sqrt() 只处理非负实数,输入负数会直接抛出 ValueError: math domain error。它不支持复数——这是和 cmath.sqrt() 的根本区别。
- 要开负数的平方根,必须用
cmath模块:import cmath; cmath.sqrt(-4)→2j -
math.sqrt(x)实际调用的是 C 库的sqrt(),底层不检查复数语义,只做实数域运算 - 如果不确定输入符号,先判断:
if x >= 0: math.sqrt(x) else: cmath.sqrt(x)
round() 和 math.floor()/ceil() 行为差异在哪?
round() 是内置函数,遵循“四舍六入五成双”(银行家舍入),而 math.floor() 和 math.ceil() 是确定性向下/向上取整,且只接受数字类型(不支持字符串)。
-
round(2.5)→2,round(3.5)→4;但math.floor(2.5)→2,math.ceil(2.5)→3 -
math.floor("3")报错:TypeError;必须先转类型:math.floor(float("3")) - 浮点误差会影响结果:比如
math.floor(1.0000000000000002)是1,但math.floor(0.1 + 0.2)是0(因为0.1+0.2 == 0.30000000000000004)
math.pi 和 math.e 精度够用吗?
够用,它们是 IEEE 754 双精度浮点表示的最接近值,和 Python 的 float 精度一致(约 15–17 位有效数字),不是符号常量。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
-
math.pi≈3.141592653589793,比手写3.14159更准,也比22/7或355/113更可靠 - 不要用于高精度科学计算(如天文轨道模拟),此时应改用
decimal或mpmath - 注意:它们不是编译期常量,不能用于
match的字面量分支,也不能当默认参数的不可变值(虽实际安全,但属不良习惯)
log() 默认底数是多少?怎么换底?
math.log(x) 默认是自然对数(底数 e),不是常用对数(底数 10)。想算 log₁₀,得用 math.log10(x);想算任意底 b 的对数,用换底公式:math.log(x) / math.log(b)。
立即学习“Python免费学习笔记(深入)”;
-
math.log(100)≈4.605(ln 100),不是 2;math.log10(100)=2.0 - 避免用
math.log(x, b)—— 虽然语法支持,但二参数形式在某些旧版本有精度问题,官方文档也建议优先用除法换底 - 底数 b 必须 > 0 且 ≠ 1,否则抛
ValueError;x ≤ 0 同样报错
math 函数时都在起作用的底层规则。

















