给定一个二次函数,即 f(x) = ax^2 + bx + c
,在 [ 中找到
最小化 x
的最快方法是什么-1, 1]f(x)
?
到目前为止,这是我提出的功能:
double QuadraticMinimizer(double a, double b, double c) {
double x = 1 - 2*(b > 0);
if (a > 0) {
x = -b/(2*a);
if (fabs(x) > 1)
x = Sign(x);
}
return x;
}
有没有可能做得更好?
最佳答案
没有“最快的方法”,因为运行时间取决于特定的机器和输入参数的特定分布。此外,您可以从初始代码中删除的内容不多。
如果极值 -b/2a
的位置经常落在区间 [-1,1]
之外,您可以在这些情况下避免除法。
如果允许从浮点表示中破解符号位以实现快速的abs
、sgn
和setsgn
函数,您可以使用类似的东西
a*= -2;
if (hack_abs(b) >= hack_abs(a))
return hack_setsgn(1, hack_sgn(a) ^ hack_sgn(b));
return b / a;
您还可以尝试使用更便携的 copysign
函数。
关于c++ - 快速二次最小化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32682366/