[python-brasil] Constante infinito

1,397 views
Skip to first unread message

Bruno Menegola

unread,
Jun 28, 2008, 10:15:23 PM6/28/08
to python...@yahoogrupos.com.br
Olá a todos!

Hoje caí em um problema que não tive antes. Preciso do "valor
infinito". Li em outro tópico que alguém usou um módulo chamado
fpconst, se não me engano, para conseguir a constante.

Tem alguma outra forma que não necessite de um módulo extra de
conseguir a constante infinito?

Se a informação ajudar, estou usando numpy pra um algoritmo de grafos.
Talvez ele tenha dentro dele, embora eu tenha procurado, não
encontrei. Poderia, sim, fazer uma gambiarra usando um valor que fique
fora dos limites dos meus dados, mas não deixa o algoritmo legível o
suficiente como seria se tivesse um "infinity" ali. Percebi também que
o fpconst é para floats, no meu caso apenas os inteiros são
necessários.

Obrigado.


--
Bruno Menegola

------------------------------------

,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia: |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
| E se você é usuário do BOL lembre-se de cadastrar o |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html


Guilherme Polo

unread,
Jun 28, 2008, 10:42:55 PM6/28/08
to python...@yahoogrupos.com.br
2008/6/28 Bruno Menegola <mene...@gmail.com>:

> Olá a todos!
>
> Hoje caí em um problema que não tive antes. Preciso do "valor
> infinito". Li em outro tópico que alguém usou um módulo chamado
> fpconst, se não me engano, para conseguir a constante.
>
> Tem alguma outra forma que não necessite de um módulo extra de
> conseguir a constante infinito?

Um float('inf') nao basta ?

>
> Se a informação ajudar, estou usando numpy pra um algoritmo de grafos.

Qualquer um desses:
numpy.Inf, numpy.Infinity, numpy.inf, numpy.infty,

E talvez um mais especifico:
numpy.NINF, numpy.PINF

> Talvez ele tenha dentro dele, embora eu tenha procurado, não
> encontrei. Poderia, sim, fazer uma gambiarra usando um valor que fique
> fora dos limites dos meus dados, mas não deixa o algoritmo legível o
> suficiente como seria se tivesse um "infinity" ali. Percebi também que
> o fpconst é para floats, no meu caso apenas os inteiros são
> necessários.
>
> Obrigado.
>
> --
> Bruno Menegola
>
>

--
-- Guilherme H. Polo Goncalves

Joao S. O. Bueno

unread,
Jun 28, 2008, 10:46:46 PM6/28/08
to python...@yahoogrupos.com.br
On Saturday 28 June 2008, Bruno Menegola wrote:
> Olá a todos!
>
> Hoje caí em um problema que não tive antes. Preciso do "valor
> infinito". Li em outro tópico que alguém usou um módulo chamado
> fpconst, se não me engano, para conseguir a constante.
>
> Tem alguma outra forma que não necessite de um módulo extra de
> conseguir a constante infinito?
>
> Se a informação ajudar, estou usando numpy pra um algoritmo de
> grafos. Talvez ele tenha dentro dele, embora eu tenha procurado,
> não encontrei. Poderia, sim, fazer uma gambiarra usando um valor
> que fique fora dos limites dos meus dados, mas não deixa o
> algoritmo legível o suficiente como seria se tivesse um "infinity"
> ali. Percebi também que o fpconst é para floats, no meu caso apenas
> os inteiros são necessários.

Olá Bruno,
se voce est'a trabalhando só com inteiros mesmo,
não existe um valor que seja equivaletne a "infinito" matemático.
No entanto, python define a constante
sys.maxint (no módulo sys) - que é o maior número que um obejto
inteiro pode representar. Mas note que em python, sys.maxint + 1
simplesmetne faz um cast para o tipo "long" que para todos os
efeitos se comporta como o desejado. (Em C ou outra linguagem de mais
baixo nível, MAXINT +1 pode te dar -MAXINT, ou seja, nada mais
longe de qualquer resultado desejado matematicamente. Outras
linguagens podem gerar uma exceção de overflow).

Acredito que sys.maxint sirva ai paa seus propósitos, senão voce vai
ter uqe usar uma outra clssse de objetos para representar seus
números - se não me engano a classe decimal.Decimal
define "infinito", assim como os você encontrou o "fpconst" para
float.

abraços,
js
-><-


>
> Obrigado.

Rafael Barreto

unread,
Jun 28, 2008, 10:57:53 PM6/28/08
to python...@yahoogrupos.com.br
> Hoje caí em um problema que não tive antes. Preciso do "valor
> infinito". Li em outro tópico que alguém usou um módulo chamado
> fpconst, se não me engano, para conseguir a constante.

sim... é esse mesmo o módulo...

> Tem alguma outra forma que não necessite de um módulo extra de
> conseguir a constante infinito?

cara, tem... mas n é mt portável... vc pode fazer algo como
float("inf") mas em algumas máquinas n irá funcionar pq cada
plataforma representa as constantes especiais do padrão IEEE754 forma
diferente... num athlon se eu n m engano é algo como
float("#1.INF")... por isso se vc fizer float("inf") num athlon será
lançada uma exceção... o fpconst foi escrito justamente pra resolver
esse pbm...

> Se a informação ajudar, estou usando numpy pra um algoritmo de grafos.
> Talvez ele tenha dentro dele, embora eu tenha procurado, não
> encontrei. Poderia, sim, fazer uma gambiarra usando um valor que fique
> fora dos limites dos meus dados, mas não deixa o algoritmo legível o
> suficiente como seria se tivesse um "infinity" ali. Percebi também que
> o fpconst é para floats, no meu caso apenas os inteiros são
> necessários.

tecnicamente, inteiros em python são do tipo int ou long. Se vc usar
um inteiro muitíssimo grande ele será convertido para long
automaticamente... isso será transparente por isso não há limite para
os inteiros em python (só a memória). O que existe é o limite do tipo
'int' q pode ser obtido assim:

import sys
sys.maxint

acho que pro teu caso isso pode ser suficiente...

é isso... qlqr dúvida, tamos ae... :p

Bruno Menegola

unread,
Jun 29, 2008, 12:02:34 AM6/29/08
to python...@yahoogrupos.com.br
2008/6/28 Joao S. O. Bueno <gwi...@mpc.com.br>:

> se voce est'a trabalhando só com inteiros mesmo,
> não existe um valor que seja equivaletne a "infinito" matemático.
> No entanto, python define a constante
> sys.maxint (no módulo sys)

Sim, é verdade, num C++ o infinito é usando numeric_limits<int>::max()
que nada mais é que o maior valor para inteiros.

Mas não conhecia ainda o sys.maxint


2008/6/28 Guilherme Polo <ggp...@gmail.com>:


> Qualquer um desses:
> numpy.Inf, numpy.Infinity, numpy.inf, numpy.infty,
>
> E talvez um mais especifico:
> numpy.NINF, numpy.PINF

Obrigado! Mas infelizmente não há algo para inteiros pela razão que o
João Bueno comentou, certo?. A menos que o numpy implementasse alguma
coisa específica?


2008/6/28 Rafael Barreto <rafaelb...@gmail.com>:


> cara, tem... mas n é mt portável... vc pode fazer algo como
> float("inf") mas em algumas máquinas n irá funcionar pq cada
> plataforma representa as constantes especiais do padrão IEEE754 forma
> diferente... num athlon se eu n m engano é algo como
> float("#1.INF")... por isso se vc fizer float("inf") num athlon será
> lançada uma exceção... o fpconst foi escrito justamente pra resolver
> esse pbm...

Interessante, não sabia disso...


Obrigado a todos! Por enquanto acho que vou ficar com o sys.maxint, na
falta de algo melhor, pois fica mais próximo do que eu queria.


--
Bruno Menegola

Guilherme Polo

unread,
Jun 29, 2008, 12:06:30 AM6/29/08
to python...@yahoogrupos.com.br
2008/6/29 Bruno Menegola <mene...@gmail.com>:

> 2008/6/28 Joao S. O. Bueno <gwi...@mpc.com.br>:
>
>> se voce est'a trabalhando só com inteiros mesmo,
>> não existe um valor que seja equivaletne a "infinito" matemático.
>> No entanto, python define a constante
>> sys.maxint (no módulo sys)
>
> Sim, é verdade, num C++ o infinito é usando numeric_limits<int>::max()
> que nada mais é que o maior valor para inteiros.
>
> Mas não conhecia ainda o sys.maxint
>
> 2008/6/28 Guilherme Polo <ggp...@gmail.com>:
>> Qualquer um desses:
>> numpy.Inf, numpy.Infinity, numpy.inf, numpy.infty,
>>
>> E talvez um mais especifico:
>> numpy.NINF, numpy.PINF
>
> Obrigado! Mas infelizmente não há algo para inteiros pela razão que o
> João Bueno comentou, certo?. A menos que o numpy implementasse alguma
> coisa específica?
>

Voce nao acha mais confiavel usar as constantes que o numpy define e
usa-las ja que voce esta usando o proprio numpy ?

--
-- Guilherme H. Polo Goncalves

------------------------------------

Gobr B. Black

unread,
Jun 28, 2008, 10:52:22 PM6/28/08
to python...@yahoogrupos.com.br
Se voce estiver trabalhando com os pesos das arestas do grafo por que
nao utiliza -1 pra definir o infinito?

2008/6/28 Joao S. O. Bueno <gwi...@mpc.com.br>:

Leonardo Santagada

unread,
Jun 29, 2008, 3:07:43 AM6/29/08
to python...@yahoogrupos.com.br

On 28/06/2008, at 23:52, Gobr B. Black wrote:

> Se voce estiver trabalhando com os pesos das arestas do grafo por que
> nao utiliza -1 pra definir o infinito?


Lembrem-se que inteiros no python viram longs automaticamente, então
sys.max_int não vai funcionar como vcs podem ver aqui:

>>> import sys
>>> sys.maxint
2147483647
>>> sys.maxint + 1
2147483648L
>>>

talvez de algum erro na hora de salvar esse longo de volta num array
do numpy, ou talvez inteiros vindos de arrays do numpy não virem
longs... mas ainda assim é arriscado.

Se tu continuar com a idéia de usar um valor máximo, lembre-se de
pegar o valor máximo do tipo usado pelo numpy, pois ele pode não ser o
sys.maxint, e tenha muito cuidado nas operações que tu fizer.

Usar infinito de floats realmente não vai funcionar:

>>> float('inf')
inf
>>> int(float('inf'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: cannot convert float infinity to long

A idéia do -1 é a que me parece mais sã.


--
Leonardo Santagada

Bruno Menegola

unread,
Jun 29, 2008, 11:31:13 AM6/29/08
to python...@yahoogrupos.com.br
2008/6/29 Guilherme Polo <ggp...@gmail.com>:

> Voce nao acha mais confiavel usar as constantes que o numpy define e
> usa-las ja que voce esta usando o proprio numpy ?

Só se tiver uma constante de infinito para inteiros no numpy. Não dá
pra usar float pois os grafos são grandes e o numpy nem permite uma
matriz do tamanho necessário pois estoura minha memória.


2008/6/28 Gobr B. Black <gobr...@gmail.com>:


> Se voce estiver trabalhando com os pesos das arestas do grafo por que
> nao utiliza -1 pra definir o infinito?

Considerei o -1 sim. Eu só queria deixar mais explícito o valor
infinito, o maxint fica mais próximo disso e além do mais eu não
espero que nenhum peso chegue perto do maxint, de qualquer forma, se
chegar, então pode ter um deles que seja maxint+1 e, com a matriz de
int que estou usando, haverá uma exceção no numpy e minha idéia de
economizar memória vai por água abaixo :P

Obrigado!


--
Bruno Menegola

Guilherme Polo

unread,
Jun 29, 2008, 1:43:46 PM6/29/08
to python...@yahoogrupos.com.br
2008/6/29 Bruno Menegola <mene...@gmail.com>:

> 2008/6/29 Guilherme Polo <ggp...@gmail.com>:
>
>> Voce nao acha mais confiavel usar as constantes que o numpy define e
>> usa-las ja que voce esta usando o proprio numpy ?
>
> Só se tiver uma constante de infinito para inteiros no numpy. Não dá
> pra usar float pois os grafos são grandes e o numpy nem permite uma
> matriz do tamanho necessário pois estoura minha memória.

numpy.cast[numpy.int](numpy.inf)

Que vai ser relacionada ao sys.maxint

--
-- Guilherme H. Polo Goncalves

------------------------------------

Kao Cardoso Felix

unread,
Jun 29, 2008, 4:27:14 PM6/29/08
to python...@yahoogrupos.com.br
2008/6/29 Bruno Menegola <mene...@gmail.com>:

> Considerei o -1 sim. Eu só queria deixar mais explícito o valor
> infinito

Pq não:

infinito = -1

?

Daí é só usar essa "constante" ao longo do teu código.

--
Kao Cardoso Félix

Página pessoal: http://www.inf.ufrgs.br/~kcfelix
Blog: http://kaofelix.blogspot.com

Henrique Baggio

unread,
Jul 3, 2008, 6:34:16 PM7/3/08
to python...@yahoogrupos.com.br
Meu conhecimento de grafos ainda é pequeno, mas usar INFINITO = -1 não pode
atrapalhar na hora de escolher uma aresta com um peso menor que outra?
Escolher entre o menor valor entre a constante e algo maior que zero daria
errado...

--
Baggio


[As partes desta mensagem que não continham texto foram removidas]

Bruno Menegola

unread,
Jul 4, 2008, 12:24:57 PM7/4/08
to python...@yahoogrupos.com.br
2008/7/3 Henrique Baggio <hnrqb...@gmail.com>:

> Meu conhecimento de grafos ainda é pequeno, mas usar INFINITO = -1 não pode
> atrapalhar na hora de escolher uma aresta com um peso menor que outra?
> Escolher entre o menor valor entre a constante e algo maior que zero daria
> errado...

Daria errado, sim, se você simplesmente fizesse a comparação com os
outros valores. No caso, a sugestão de usar -1 é uma forma de abstrair
a constante infinito que é impossível representar usando números
inteiros. Usando -1 como sendo infinito implica em fazer um teste
extra na hora de montar o seu algoritmo. Você teria que testar se o
número é < 0 ou >= 0, no caso de menor que zero, você considera o
valor como sendo infinito e daria o tratamento correto, senão faz a
comparação que você desejava no início. Tudo isso considerando que o
seu grafo não possua arestas com pesos negativos, obviamente, pois, se
existir, é necessário abordar de forma diferente a especificação do
infinito.

--
Bruno Menegola

Reply all
Reply to author
Forward
0 new messages