Если это не проблема с вашим кубическим решателем (как предложил phkahler), то я держу пари, что это случай деления int в следующих строках:
f = float(c - (3*b**2 / 8))
g = float(d + (b**3/ 8) - (b*c / 2))
h = e - (3*b**4 / 256) + (b**2 * c / 16) - (b*d / 4)
Если вы используетеверсия Python, которая меньше 3.0 и не импортирует деление из __future__
, тогда у вас могут быть серьезные проблемы здесь.Например, если b = 3, то (3*b**2/8)
равно 3 при делении на int, а не на правильное значение деления с плавающей запятой, равное 3,375.Вероятно, лучший способ исправить это - преобразовать a, b, c, d и e в числа с плавающей точкой, прежде чем вы начнете делать вычисления.После того, как вы сделали это исправление, ваше преобразование в число с плавающей точкой после всех вычислений для f и g действительно не нужно, и сейчас они вам не особо помогают.
Для получения дополнительной информации об этой проблеме деления и ее историисм .:
http://www.python.org/dev/peps/pep-0238/
http://python -history.blogspot.com / 2009/03 / problem-with-integer-Division.html