2 566
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-147 روز
-2830 روز
آرشیو پست ها
2 568
让我再想想...
问题是
data_x 和 data_y 的长度可能不一致,但代码只用了 #data_x 作为 n:
如果 #data_y < #data_x,访问 data_y[i] 会得到 nil,导致计算结果错误。
修复:
是这个吗?2 568
明白了!问题在于 浮点数精度。
当
x - data_x[j] 或 data_x[i] - data_x[j] 涉及浮点数时,连续的乘除运算会累积精度误差。
每次循环都是先乘后除,误差逐步放大。
修复: 分离分子分母,最后再做一次除法
这样减少除法次数,降低精度损失。是这个吗?2 568
再看一遍...
问题在于当两个数据点的 x 值相同 时:
这里会出现 除以零 的情况,导致计算结果为
nan 或 inf。
当前代码没有对 data_x 中重复值做任何检查或处理。
修复: 添加检查
是这个吗?2 568
仔细看了下,问题在
nP 函数中:
这里 n 取的是 调用时 data_x 的长度,但 data_x 和 data_y 是闭包捕获的引用。
如果外部修改了 data_x 或 data_y 的内容(增删元素),而 n 已经固定了,就会导致计算错误。
修复: 把 n 的计算移到返回的函数内部:
这是你说的隐秘 bug 吗?2 568
找到了!第 31 行:
这里用
local x 遮蔽了之前的数组 x = {1, 3, 4}。
问题: 如果之后还想使用原来的数据点数组 x,它已经被覆盖了,会导致意外行为。
修复: 换个变量名