1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| Function DEG3b(a#, ByVal b#, c#, d#)
Application.Volatile
Dim p#, q#, r#, s#, rx1#, rx2#, rx3#, ix2#, ix3#
b = b / a / 3
p = b * b - c / a / 3
q = (b * c - d) / a / 2 - b * b * b
r = q * q
s = p * p * p
If Abs(r - s) < 0.00000000000001 Then
p = Sgn(q) * Abs(q) ^ (1 / 3)
rx1 = 2 * p
rx2 = -p
rx3 = -p
ElseIf r < s Then
If r / s >= 1 Then r = 2 * (1 - Sgn(q)) * Atn(1) Else r = Atn(-q / Sqr(s - r)) + 2 * Atn(1)
rx1 = Sqr(p) * Cos((r + 8 * Atn(1)) / 3) * 2
rx2 = Sqr(p) * Cos((r - 8 * Atn(1)) / 3) * 2
rx3 = Sqr(p) * Cos(r / 3) * 2
Else
r = Sqr(r - s)
p = Sgn(q + r) * Abs(q + r) ^ (1 / 3)
q = Sgn(q - r) * Abs(q - r) ^ (1 / 3)
rx1 = q + p
rx2 = -rx1 / 2
ix2 = Sqr(3) * (q - p) / 2
rx3 = rx2
ix3 = -ix2
End If
DEG3b = Array(rx1 - b, rx2 - b, ix2, rx3 - b, ix3)
End Function |
Partager