我必须在Linux Kernel的源代码中修改一点TCP算法。 在其中,我必须按如下方式计算拥塞窗口:
cwnd = cwnd (1-x^alpha) where alpha and x are float type and satisfy 0<x<1, alpha >0.
通常,必须使用#include Math.h和pow()函数,对吧?
但我不知道指数计算是否会使操作变慢。
所以,我想到了伯努利的不平等
(1-a)^x < 1-ax where 0<a<1
所以在我的情况下,我可以通过使用伯努利来计算近似值。
x^alpha = (1-(1-x))^alpha ~ 1 - alpha(1-x)
如果这不行,那么还有什么办法吗? 请帮帮我。
答案 0 :(得分:1)
除了在内核模式下使用或不使用浮点数的问题之外,近似并不是那么明显,因为它不能保持积极性。为此用途
x^a = 1/(1/x)^a = 1/(1+u)^a approx 1/(1+a*u)
其中1 / x大于或等于1,因此近似中的所有项都为正。重新插入u = 1 / x-1给出
x^a approx x/(x+a*(1-x))
对于x = 0是0,对于x = 1是1并且在它们之间单调增加。如果x = p / q是有理数且是整数,则得到的有理表达式为
p/(p+a*(q-p)).