On Thu, Oct 15, 2009 at 11:28 AM, Mr Timothy Hall <[email protected]> wrote: > hi, > i am writing a program for a runge-cutter method of solving ODE's and im > having a problem with one part. > > whenever i run this part of the program, no matter what values i put in for > vto, k1t etc... it always equals zero. > im slightly aware of floating point numbers but im not sure why this will > not give me a real answer. > when i do it on my calculator the answer is 0.897 for the correct values of > k3t etc. so its not like the result > is extremely small. > any help would be great. > > def runge_tang(vto,k1t,k3t,k4t,k5t,k6t): > vn = > vto+(16/135)*k1t+(6656/12825)*k3t+(28561/56430)*k4t-(9/50)*k5t+(2/55)*k6t > return vn
The problem is that Python 2 (it has changed in Python 3) uses integer division when making the quotient of integers. 16/135 is thus evaluated to zero, 6656/12825 as well, etcetera. There are 2 ways to solve this: 1. At the top of your file, add the line "from __future__ import division" - this makes the division behave as in Python 3, which uses floating point division when dividing integers as well. 2. Change something to float before doing the division, for example through: vn = vto+(float(16)/135)*k1t+(float(6656)/12825)*k3t+(float(28561)/56430)*k4t-(float(9)/50)*k5t+(float(2)/55)*k6t or vn = vto+(16.0/135)*k1t+(6656.0/12825)*k3t+(28561.0/56430)*k4t-(9.0/50)*k5t+(2.0/55)*k6t -- André Engels, [email protected] _______________________________________________ Tutor maillist - [email protected] To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
