Quote:
Originally Posted by fysiks
When posting an error that references a snippet of code, you need to show us which line is referenced by the error (because we can't use the line numbers due to not having the full code).
Also, you're using log() instead of floatlog(). I couldn't find any references to a function called log().
|
log() is referring to -> log(%0) floatlog( %0, 2.7182818 ) from the post:
https://forums.alliedmods.net/showthread.php?t=301521.
part of the code
PHP Code:
public DeathMsg()
{
new Killer = read_data(1)
new Victim = read_data(2)
if(get_bool_casual())
{
GetParam(Killer, Skill[Killer][Rank], Skill[Killer][Dvt], Skill[Killer][Vlt])
GetParam(Victim, Skill[Victim][Rank], Skill[Victim][Dvt], Skill[Victim][Vlt])
Update(Killer, Victim, 1.0)
Update(Victim, Killer, 0.0)
set_task(1.5, "Apply", Killer)
set_task(2.5, "Apply", Victim)
}
}
}
public GetParam(id, const Float:rating, const Float:deviation, const Float:volatility)
{
u[id] = (rating - kDefaultR) / kScale
p[id] = deviation / kScale
s[id] = volatility
}
public Update(id, id2, Float:Game)
{
// Calcular os valores das funções E e G
new Float:g = G(p[id2])
new Float:e = E(g, u[id], u[id2])
// Calcular 1 /v e v
new Float:invV = g * g * e * (1.0 - e)
new Float:v = 1.0 / invV
// Calcule o valor delta de g, e e v
// valores
new Float:dInner = g * (Game - e)
new Float:d = v * dInner
// Calcule novos valores de classificação, desvio e volatilidade
s[id] = floatexp(Convergence(d, v, p[id], s[id]) / 2.0)
//exp(Convergence(d, v, p, s)/2.0)
p[id] = 1.0 / xs_sqrt((1.0 / (p[id] * p[id] + s[id] * s[id])) + invV)
u[id] = u[id] + p[id] * p[id] * dInner
}
public Apply(id)
{
Skill[id][Rank] = ((u[id] * kScale) + kDefaultR)
Skill[id][Elo] = ((u[id] * kScale) + kDefaultR)
Skill[id][Dvt] = p[id] * kScale
Skill[id][Vlt] = s[id] * kDefaultS
u[id] = 0.0
p[id] = 0.0
s[id] = log(Skill[id][Vlt] * Skill[id][Vlt]) // Error calculating logarithm
}
/// Computes the value of the g function for a rating
stock Float:G(Float:deviation)
{
new Float:scale = deviation / M_PI
return 1.0 / xs_sqrt(1.0 + 3.0 * scale * scale)
}
/// Computes the value of the e function in terms of a g function value
/// and another rating
stock Float:E(Float:g, Float:RatingPlayer, Float:RatingPlayer2)
{
new Float:exponent = -1.0 * g * (RatingPlayer - RatingPlayer2)
return 1.0 / (1.0 + floatexp(exponent))
}
stock Float:Convergence(const Float:d,
const Float:v,
const Float:p,
const Float:s)
{
// Initialize function values for the iteration procedure
new Float:dS = d * d
new Float:pS = p * p
new Float:tS = kSystemConst * kSystemConst
new Float:a = log( s * s ) // Error calculating logarithm. Value s = 0.06
// Select upper and lower iteration ranges
new Float:A = a
new Float:B
new Float:bTest = dS - pS - v
if (bTest > 0.0)
{
B = log(bTest)
}
else
{
B = a - kConvergence
while (F(B, dS, pS, v, a, tS) < 0.0)
{
B -= kConvergence
}
}
// run the iteration
new Float:fA = F(A, dS, pS, v, a, tS)
new Float:fB = F(B, dS, pS, v, a, tS)
while (floatabs(B - A) > kConvergence)
{
new Float:C = A + (A - B) * fA / (fB - fA)
new Float:fC = F(C, dS, pS, v, a, tS)
if (fC * fB < 0.0)
{
A = B;
fA = fB;
}
else
{
fA /= 2.0;
}
B = C;
fB = fC;
}
return A;
}
stock Float:F(const Float:x,
const Float:dS,
const Float:pS,
const Float:v,
const Float:a,
const Float:tS)
{
new Float:eX = floatexp(x)
new Float:num = eX * (dS - pS - v - eX)
new Float:den = pS + v + eX
return (num / (2.0 * den * den)) - ((x - a) / tS)
}
Lines that are in trouble
PHP Code:
new Float:a = log( s * s )
//and
s[id] = floatlog(Skill[id][Vlt] * Skill[id][Vlt])
I've tried with floatlog and the same problem.