[Tutor] faulty code (maths)

Lie Ryan lie.1296 at gmail.com
Sun Nov 23 20:45:18 CET 2008

On Sun, 23 Nov 2008 19:39:54 +0530, Arun Tomar wrote:

> hi!
> On Sun, Nov 23, 2008 at 5:07 PM, David <ldl08 at gmx.net> wrote:
>> Hello everybody,
>> I recently came across a book by Prof. Langtangen: Indroduction to
>> Computer Programming:
>> http://folk.uio.no/hpl/INF1100/INF1100-ebook-Aug08.pdf
>> I am trying to solve exercise 1.18 ("Why does the following program not
>> work correctly?"), but I don't find the mistake: why does the line
>> q = sqrt(b*b - 4*a*c)
> problem here is that the method sqrt doesn't accepts -negative numbers
> which in this case is the outcome of the expression above. to rectify
> that u can use the following
> q = sqrt(math.fabs(b*b - 4*a*c))
> basically convert the negative number to absolute number, rest of the
> stuff will work.

An alternative solution would be to use the sqrt from cmath module, which 
does handle negative root by outputting complex number:

a = 2; b = 1; c = 2
from cmath import sqrt
q = sqrt(b*b - 4*a*c)
x1 = (-b + q)/2*a
x2 = (-b - q)/2*a
print x1, x2

(-1+3.87298334621j) (-1-3.87298334621j)

This would be the most mathematically correct solution without changing 
what the program _seems_ to meant.

However, what the program _actually_ meant, I don't know.

Python's math module does not handle complex numbers because many day-to-
day scripters doesn't have strong mathematical background to handle 
complex number, or they simply doesn't need to use complex number, or 
sometimes complex number solution is -- for their particular problem -- 
an indication that something is not right.

More information about the Tutor mailing list