# [Tutor] Little problem with math module

Tiago Katcipis katcipis at inf.ufsc.br
Mon Apr 21 20:25:08 CEST 2008

```i will change the subject but this one is interessenting.

i have this test code

import funcoes
import bissecao
import falsa_posicao
import falsa_posicaom
import newton_simples
import math

INTERVALO = [0,1]
ERRO_DET = math.pow(10, -16)
ITER = funcoes.calcular_num_iteracoes(INTERVALO[0], INTERVALO[1], ERRO_DET)

print 'Por bissecao: '
print 'Numero de iteracoes necessarios = ', ITER
funcoes.convergente_simples, ERRO_DET, ITER)
print 'Erro = ', erro
print ''

and i have this function on bissecao

import math
import funcoes

def obter_alpha(intervalo, funcao, erro_passado = 0.0, limite = 20):

a = intervalo[0]
b = intervalo[1]
fa = funcao(a)
fb = funcao(b)
xm = 0.0

if( (fa * fb) < 0 ):

xm = (a + b) / 2.0
fm = funcao(xm)

if(fm == 0):
return xm, 0.0

if( (fm * fa) < 0.0):
b = xm
else:
a = xm

erro = funcoes.calcular_erro(a, b)

return xm, erro

print 'Iteracao ', contador, ' alpha = ', xm
print 'Erro ', contador, ' = ', erro

return xm, erro

else:
print 'Funcao nao eh continua'

my problem is, INSIDE the funcion...the variable erro is correct, but
when i return it to the test...and the test prints it....comes out 0.0.
Its disturbing...i didnt found a way of solving this.

the out of the test is like this

Erro  50  =  1.50914019446e-15
Iteracao  51  alpha =  0.588532743982
Erro  51  =  7.54570097231e-16
Alpha =  0.588532743982
Erro =  0.0

it would print more things but it is desnecessary, inside the function
erro has a value like 7.54570097231e-16, but when it is returned it goes
out like 0.0. What can i do to prevent this from happening?

the whole thing is at
https://svn.inf.ufsc.br/katcipis/python/trunk/Funcoes/src/

just log as user "guest" without a password

ALAN GAULD escreveu:
> On Mon, Apr 21, 2008 at 12:07 AM, Alan Gauld
> <alan.gauld at btinternet.com <mailto:alan.gauld at btinternet.com>> wrote:
>
>
> >>> pow(-20, 0.3333333)
> Traceback (most recent call last):
>  File "<stdin>", line 1, in <module>
> ValueError: negative number cannot be raised to a fractional power
> >>> -20**0.3333333
> -2.7144173455393048
> >>>
>
> I think you're confusing the order of operations.
>
> math.pow(-20, (1.0/3.0)) and -20**(1.0/3.0) are not equivalent
>
> Whereas, as john mentioned, -20**(1.0/3.0) is actually
> -(20**(1.0/3.0)), math.pow(-20, (1.0/3.0)) is (-20)**(1.0/3.0)
>
> Yes, quite correct, I posted my reply before the others had
> posted theirs although it showed up afterwards(at least on gmane)
>
> > exponentiation has higher precedence over positive, negative.
>
> Yep, I hadn't realized that, although it does make sense when you
>
> /> Note that math.pow is unrelated to the builtin power operator /
> /> and the result of math.pow(0.0, -2.0) will vary by platform. /
>
> /This is interesting, I had assumed that pow simply called **./
> Does anyone know why they made it different?
>
> Alan G.
> ------------------------------------------------------------------------
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>

```