Python e Bash comparam números

0

Se eu executar o seguinte no bash, receberei a resposta correta

# if [ 2.0000000000000000000000000001 > 2 ] ; then echo " True "; else echo " False " ; fi
 True
#

Mas se for executado em IDLE python

>>> if 2.00000000000000001 > 2.0:
    print "true"
else:
    print "false"


false
>>> 

O Python não pode comparar o número certo?

Eu acho que tenho a resposta. O Python usa apenas as 10 escavações para os números flutuantes.

>>> c=2.00000000001232
>>> print c
2.00000000001
>>> d= 2.00000000003234
>>> print d
2.00000000003
>>> e=2.000000000049
>>> print e
2.00000000005
>>>

Obrigado pessoal.

    
por Alex 28.02.2017 / 18:06

1 resposta

4

Você não comparou com sucesso os números no bash, você apenas testou que o "bash" (o comando test ) testou com sucesso o tamanho da string 2.0000000000000000000000000001 e redirecionou a saída inexistente para uma string. arquivo chamado 2 .

Você deseja o operador -gt , exceto:

[ 2.0000000000000000000000000001 -gt 2 ] && echo yes

-bash: [: 2.0000000000000000000000000001: integer expression expected

Você pode pensar em:

[[ 2.0000000000000000000000000001 > 2 ]] && echo yes

e obtenha:

yes

exceto que você não está comparando inteiros nesse ponto, você está classificando strings:

[[ 9 > 11 ]] && echo yes

yes

Para comparar números de ponto flutuante em Python, consulte Stack Overflow para mais detalhes, como este

    
por 28.02.2017 / 18:27