[Rio-pm] Dúvida sobre o Hackathon

2012-11-30 Por tôpico Rodrigo Mosconi (perl)
Só por curiosidade:

O Hackathon é no segundo sábado do mês, ou no primeiro sábado depois do ES?

Pois em Dezembro o segundo sábado do mês será antes da segunda
quinta-feira do mês.

Att.
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


Re: [Rio-pm] Chaves de hash

2012-11-30 Por tôpico Rodrigo Mosconi (perl)
O melhor seria;

if ( abs($a-$b) < $errro ) {
   say "tratar como igual";
} else {
   say "tratar como diferentes";
};

sendo $erro a margem de erro aceitável ($erro = 0.1, por exemplo)

Caso precise comparar maior ou menor:

if ( $a > ($b -$erro) ) {
  say "tratar como maior";
}

if ( $a < ($b + $erro) ) {
  say "tratar como menor";
}

Umas das primeiras coisa que são ensinados em cursos de cálculo
numérico é tratamento de erro.

Att

Mosconi

Em 29 de novembro de 2012 23:27, Blabos de Blebe  escreveu:
> Um exemplo hipotético...
>
> Suponha que não haja escapatória e tenha-se que comparar flutuantes...
>
> if ( float_equal( $a, $b ) ) {
> say 'igual';
> }
> elsif ( $a < $b && !float_equal( $a, $b ) ) {
> say 'menor';
> }
> else {
> say 'maior';
> }
>
> Será que funciona?
>
> 2012/11/29  :
>> Um exemplo mais preciso:
>>
>> $ uname -a
>> SunOS cg01spo 5.10 Generic_13-03 sun4v sparc SUNW,SPARC-Enterprise-T5120
>>
>> $ perl -E '
>> if (0.2 > 0.19997){
>> say "0.2 is greater than 0.19997";}
>>
>> else {
>> say "Floating Point is not true real"};'
>> 0.2 is greater than 0.19997
>> $
>>
>> $ perl -E '
>> if (0.2 > 0.19998){
>> say "0.2 is greater than 0.19998";}
>>
>> else {
>> say "Floating Point is not true real"};'
>> Floating Point is not true real
>> $
>>
>> Por que é importante saber essas coisas?
>> http://ta.twi.tudelft.nl/users/vuik/wi211/disasters.html
>>
>>
>>
>>
>>
>>
>> Em 2012-11-29 15:13, thiagogla...@ticursos.net escreveu:
>>
 Não se compara reais por igualdade.
>>>
>>> Se você tem erro na igualdade, terá nas outras comparações se a
>>> diferença entre os números for menor que o maior acréscimo suportado
>>> pela plataforma:
>>>
>>> $ perl -E '
>>> if (0.2 > 0.1999){

 say "0.2 is greater than 0.19";}
 else {
 say "Floating Point is not true real"};'
>>>
>>> Floating Point is not true real
>>> $
>>>
>>> $ perl -E '
>>> if (0.2 > 0.19){
>>> say "0.2 is greater than 0.19";}
>>> else {
>>> say "Floating Point is not true real"};'
>>> 0.2 is greater than 0.19
>>> $
>>>
>>> Então, comparar pontos flutuantes não é seguro. Nem igualdade, nem
>>> maio, nem menor.
>>>
>>> E mais: garanto que se você quer usar um número real como chave de
>>> Hash você tem um problema na análise da lógica do problema que está
>>> enfrentando e como solucioná-lo.
>>>
>>>
>>> Em 2012-11-29 10:36, Blabos de Blebe escreveu:

 Na verdade é o contrário, não?

 Não se compara reais por igualdade.

 Se você usa reais como chaves de hash, você tem algum problema...

 Ao não controlar a representação interna em ponto flutuante, você pode
 nunca mais alcançar o valor relacionado à chave, se usar um número
 real como chave, pois qualquer bit diferente, mesmo que arredondando
 no mesmo número vai resultar num cálculo diferente na tabela hash.

 Igualdade entre númros reais constuma ser definida como algo assim:

 sub float_equal {
 my ($first, $second) = @_;
 my $threshold = 0.0001 # arbitrário
 return abs( $first - $second ) < $threshold;
 }

 Converter para string antes de usar como chave de hash também não me
 parece saudável, pois, embora a string vá funcionar bem no hash, você
 não garante que a conversão vai resultar sempre na mesma string, e aí
 vc se ferra do mesmo jeito.

 Por outro lado, se você nunca vai acessar o elemento do hash através
 da chave, um foreach por keys() ou values() vai te retornar os
 valores...

 Mas aí eu te perguntaria por que rails você está usando hash pra isso...



 On Thu, Nov 29, 2012 at 6:47 AM,   wrote:
>
> Existe um problema aqui, diferente da comparação.
> A comparação de reais é problemática devido a estrutura interna do ponto
> flutuante. NÃO SE COMPARA REAIS POR MAIOR OU MENOR.Isso não é do Perl,
> mas
> das regras de aproximação usada pelos processadores.
>
> Rounding rules
>
> The standard defines five rounding rules. The first two round to a
> nearest
> value; the others are called directed roundings:
> Roundings to nearest
>
> Round to nearest, ties to even – rounds to the nearest value; if the
> number falls midway it is rounded to the nearest value with an even
> (zero)
> least significant bit, which occurs 50% of the time; this is the default
> for
> binary floating-point and the recommended default for decimal.
> Round to nearest, ties away from zero – rounds to the nearest value;
> if
> the number falls midway it is rounded to the nearest value above (for
> positive numbers) or below (for negative numbers); this is intended as
> an
> option for decimal floating point.
>
> Directed roundings
>
> Round toward 0 – directed

Re: [Rio-pm] Chaves de hash

2012-11-30 Por tôpico Renato Santos
que toda vez que você passar termofilter('arquivo', -30, -20) todo o
arquivo estaria sendo lido (o q é obvio)

que por exemplo, poderia ser

$dados = h_energy('arquivo.txt');

termofilter($dados, -30, -20);

nesse caso, o codigo ficaria assim:
http://pastebin.com/ZyWPxq9A



2012/11/30 Aureliano Guedes 

>  Entendi, eu so não entendi a parte de "uma coisa: eu vi que sua funcao lá
> de intervalo está criando tudo de novo, dependendo do caso, você pode fazer
> a leitura apenas uma vez,".
>
> O que você quis dizer com isso?
>
> --
> From: renato.c...@gmail.com
> Date: Fri, 30 Nov 2012 10:44:24 -0200
>
> To: rio-pm@pm.org
> Subject: Re: [Rio-pm] Chaves de hash
>
> faça o push (só que sem a funcao),
>
> outra forma, porque não usar uma array ? e ai você coloca assim:
>
>  my @hmfe;
>
>   while (..){ ...
>   push @hmfe, {valor => $mirna, registro => $record};
>   ...
>   }
>
>
> e ai você faria o seu loop pra encontrar o valor mudando apenas
>
> $keys por $linha->{valor}
>
> foreach my $linha (@hmfe){
>... if ..
> }
>
> -
> uma coisa: eu vi que sua funcao lá de intervalo está criando tudo de novo,
> dependendo do caso, você pode fazer a leitura apenas uma vez, retornar
> o @hmfe (em referencia {  return \@hmfe }, para nao duplicar na memoria) e
> depois usar ele na funcao que recebe o intervalo e retorna os registros.
>
> 2012/11/30 Aureliano Guedes 
>
>  Biólogo não, biomedico, acredite essa diferença fere nossos sentimentos.
> hahaha
>
>
> > Hashs não têm mais de uma chave igual. Ele vai mudar o valor
> > relacionado à chave e não criar outra chave com o mesmo valor.
>
> Agora sim, isso é um problemão. Estarei perdendo dados assim.
>
> Como poderia reverter isso então??
>
> Faria a chave ser valor e o valor ser chave?? Quais minhas opções??
>
> sub h_energy{
> my $self = shift;
> my $data = $self->h_data || die "cannot find data";
> my $file = file("$data")->openr();
> my %hmfe = ();
> my $mirna;
> my $record;
>
> while (my $linha = <$file>) {
> if ( $linha =~ m{target:.*} ) {
> $record = $linha . $record if ($record);
> $hmfe{$mirna} = $record if ($mirna);
> $mirna = $+{mirna};
> $record = q() if ($record);
> }
> elsif ($linha =~ m{mfe:\s+(\S+)\s+kcal/mol}){
> $mirna = $1;
> $record .= $linha;
> }
>  else {
> $record .= $linha;
>  }
> }
> return %hmfe;
> }
>
> > Date: Fri, 30 Nov 2012 10:30:17 -0200
> > From: thiagogla...@ticursos.net
>
> > To: rio-pm@pm.org
> > Subject: Re: [Rio-pm] Chaves de hash
> >
> > Hashs não têm mais de uma chave igual. Ele vai mudar o valor
> > relacionado à chave e não criar outra chave com o mesmo valor.
> >
> > Em 2012-11-30 00:24, Aureliano Guedes escreveu:
> > > Bruno, no meu if funcionou tanto com && quanto com and. O meu erro
> > > mesmo foi que a regex pegava um espasso.
> > >
> > > Bem a minha duvida ficou em "porque seria problematico colocar reais
> > > em chaves de hash no meu caso?"
> > >
> > > Se eu fosse pesquisar um valor especifico e tivesse duas ou mais
> > > chaves com o mesmo valor real seria problema
> > > mas no meu caso umporta que o valor esteja em um determinado
> > > intervalo, podem ter 20 chaves iguais, estando no intervalo
> > > eu quero os 20 valores. 49??
> > >
> > > -
> > > From: leonardo.bal...@gmail.com
> > > Date: Fri, 30 Nov 2012 00:15:50 -0200
> > > To: rio-pm@pm.org
> > > Subject: Re: [Rio-pm] Chaves de hash
> > >
> > > Quero participar dessa discussao antes do 50.
> > >
> > > Por que tanta peculiariade na dicotomia de popular?
> > >
> > > Na buzilis da cizania ja nao era mais sobre Perl ou foi impressao
> > > minha?
> > >
> > > Leo Balter - via mobile
> > >
> > > Em 30/11/2012, às 00:02, Marcio Ferreira
> > >  escreveu:
> > >
> > >> 47
> > >>
> > >> On Nov 29, 2012 11:35 PM, "Renato Santos" 
> > >> wrote:
> > >>
> > >>> #define float_epsilon 0.1;
> > >>> #define float_equal(a,b) (fabs((a) - (b)) < float_epsilon)
> > >>>
> > >>> BTW
> > >>>
> > >>> 2012/11/29 Blabos de Blebe 
> > >>>
> >  float_equal
> > >>>
> > >>> --
> > >>>
> > >>> Saravá,
> > >>> Renato CRON
> > >>>
> > >>> http://www.renatocron.com/blog/ [1]
> > >>> @renato_cron [2]
> > >>>
> > >>> ___
> > >>> Rio-pm mailing list
> > >>> Rio-pm@pm.org
> > >>> http://mail.pm.org/mailman/listinfo/rio-pm [3]
> > >
> > >> ___
> > >> Rio-pm mailing list
> > >> Rio-pm@pm.org
> > >> http://mail.pm.org/mailman/listinfo/rio-pm [3]
> > >
> > > ___ Rio-pm mailing list
> > > Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm
> > >
> > > Links:
> > > --
> > > [1] http://www.renatocron.com/blog/
> > > [2] http://twitter.com/#%21/renato_cron
> > > [3] http://mail.pm.org/mailman/listinfo/rio-pm
> > >
> > > __

Re: [Rio-pm] Chaves de hash

2012-11-30 Por tôpico Aureliano Guedes


> Não entendo de biomedicina, mas acho que deveriamos pensar em algo como 
> uma estrutura de dados mas bem planejada. Por que você está usando o 
> valor de calorias como chave do hash?
Na verdade é energia de ligação, pois trabalhar com estrutura tridimencional e 
estabilidade termodinamica é mais quimico-fisica do que biologia.
Eu fiz isso porque eu queria aquele dado somente se a energia de ligação 
estivesse no intervalo que eu planegei.


> Se você criar uma estrutura mais complexa, como array de hashs ou mesmo 
> um array de objetos... opções não faltam.
O Renato deu uma luz nesse quesito. Não sabia que podia usar um array para 
guardar valores acessados por chave.

Obrigado por todos por me ensinarem boas praticas.

> Date: Fri, 30 Nov 2012 11:23:04 -0200
> From: thiagogla...@ticursos.net
> To: rio-pm@pm.org
> Subject: Re: [Rio-pm] Chaves de hash
> 
> > Biólogo não, biomedico
> Putz, really sorry!!! 2 gaf.
> 
> > Agora sim, isso é um problemão. Estarei perdendo dados assim.
> Sim, estará perdendo dados.
> 
> > Faria a chave ser valor e o valor ser chave?? Quais minhas opções??
> Não entendo de biomedicina, mas acho que deveriamos pensar em algo como 
> uma estrutura de dados mas bem planejada. Por que você está usando o 
> valor de calorias como chave do hash?
> 
> Se você criar uma estrutura mais complexa, como array de hashs ou mesmo 
> um array de objetos... opções não faltam.
> 
> Em 2012-11-30 10:37, Aureliano Guedes escreveu:
> > Biólogo não, biomedico, acredite essa diferença fere nossos 
> > sentimentos. hahaha
> >
> >> Hashs não têm mais de uma chave igual. Ele vai mudar o valor
> >> relacionado à chave e não criar outra chave com o mesmo valor.
> >
> > Agora sim, isso é um problemão. Estarei perdendo dados assim.
> >
> > Como poderia reverter isso então??
> >
> > Faria a chave ser valor e o valor ser chave?? Quais minhas opções??
> >
> > sub h_energy{
> >  my $self = shift;
> >  my $data = $self->h_data || die "cannot find data";
> >  my $file = file("$data")->openr();
> >  my %hmfe = ();
> >  my $mirna;
> >  my $record;
> >
> >  while (my $linha = <$file>) {
> >  if ( $linha =~ m{target:.*} ) {
> >  $record = $linha . $record if ($record);
> >  $hmfe{$mirna} = $record if ($mirna);
> >  $mirna = $+{mirna};
> >  $record = q() if ($record);
> >  }
> >  elsif ($linha =~ m{mfe:s+(S+)s+kcal/mol}){
> >  $mirna = $1;
> >  $record .= $linha;
> >  }
> >  else {
> >  $record .= $linha;
> >  }
> >  }
> >  return %hmfe;
> > }
> >
> >> Date: Fri, 30 Nov 2012 10:30:17 -0200
> >> From: thiagogla...@ticursos.net
> >> To: rio-pm@pm.org
> >> Subject: Re: [Rio-pm] Chaves de hash
> >>
> >> Hashs não têm mais de uma chave igual. Ele vai mudar o valor
> >> relacionado à chave e não criar outra chave com o mesmo valor.
> >>
> >> Em 2012-11-30 00:24, Aureliano Guedes escreveu:
> >> > Bruno, no meu if funcionou tanto com && quanto com and. O meu erro
> >> > mesmo foi que a regex pegava um espasso.
> >> >
> >> > Bem a minha duvida ficou em "porque seria problematico colocar 
> >> reais
> >> > em chaves de hash no meu caso?"
> >> >
> >> > Se eu fosse pesquisar um valor especifico e tivesse duas ou mais
> >> > chaves com o mesmo valor real seria problema
> >> > mas no meu caso umporta que o valor esteja em um determinado
> >> > intervalo, podem ter 20 chaves iguais, estando no intervalo
> >> > eu quero os 20 valores. 49??
> >> >
> >> > -
> >> > From: leonardo.bal...@gmail.com
> >> > Date: Fri, 30 Nov 2012 00:15:50 -0200
> >> > To: rio-pm@pm.org
> >> > Subject: Re: [Rio-pm] Chaves de hash
> >> >
> >> > Quero participar dessa discussao antes do 50.
> >> >
> >> > Por que tanta peculiariade na dicotomia de popular?
> >> >
> >> > Na buzilis da cizania ja nao era mais sobre Perl ou foi impressao
> >> > minha?
> >> >
> >> > Leo Balter - via mobile
> >> >
> >> > Em 30/11/2012, às 00:02, Marcio Ferreira
> >> >  escreveu:
> >> >
> >> >> 47
> >> >>
> >> >> On Nov 29, 2012 11:35 PM, "Renato Santos" 
> >> >> wrote:
> >> >>
> >> >>> #define float_epsilon 0.1;
> >> >>> #define float_equal(a,b) (fabs((a) - (b)) < float_epsilon)
> >> >>>
> >> >>> BTW
> >> >>>
> >> >>> 2012/11/29 Blabos de Blebe 
> >> >>>
> >>  float_equal
> >> >>>
> >> >>> --
> >> >>>
> >> >>> Saravá,
> >> >>> Renato CRON
> >> >>>
> >> >>> http://www.renatocron.com/blog/ [1]
> >> >>> @renato_cron [2]
> >> >>>
> >> >>> ___
> >> >>> Rio-pm mailing list
> >> >>> Rio-pm@pm.org
> >> >>> http://mail.pm.org/mailman/listinfo/rio-pm [3]
> >> >
> >> >> ___
> >> >> Rio-pm mailing list
> >> >> Rio-pm@pm.org
> >> >> http://mail.pm.org/mailman/listinfo/rio-pm [3]
> >> >
> >> > ___ Rio-pm mailing 
> >> list
> >> > Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm
> >> >
> >> > Links:
> >> > --
> >> > [1] http://www.renatocron.com/blog/
> >> > [2] http://twitter.com/#%21/renato_cron
> >> > [3] http://mail.pm

Re: [Rio-pm] Chaves de hash

2012-11-30 Por tôpico Aureliano Guedes

Entendi, eu so não entendi a parte de "uma coisa: eu vi que sua funcao lá de 
intervalo está criando tudo de 
novo, dependendo do caso, você pode fazer a leitura apenas uma vez,".

O que você quis dizer com isso?

From: renato.c...@gmail.com
Date: Fri, 30 Nov 2012 10:44:24 -0200
To: rio-pm@pm.org
Subject: Re: [Rio-pm] Chaves de hash

faça o push (só que sem a funcao),
outra forma, porque não usar uma array ? e ai você coloca assim:
 my @hmfe;


  while (..){ ...

  push @hmfe, {valor => $mirna, registro => $record};

  ...
  }

e ai você faria o seu loop pra encontrar o valor mudando apenas


$keys por $linha->{valor}
foreach my $linha (@hmfe){   ... if ..}
-uma coisa: eu vi que sua funcao lá de intervalo está criando tudo de novo, 
dependendo do caso, você pode fazer a leitura apenas uma vez, retornar o @hmfe 
(em referencia {  return \@hmfe }, para nao duplicar na memoria) e depois usar 
ele na funcao que recebe o intervalo e retorna os registros.


2012/11/30 Aureliano Guedes 






Biólogo não, biomedico, acredite essa diferença fere nossos sentimentos. hahaha

> Hashs não têm mais de uma chave igual. Ele vai mudar o valor 
> relacionado à chave e não criar outra chave com o mesmo valor.



Agora sim, isso é um problemão. Estarei perdendo dados assim.

Como poderia reverter isso então??

Faria a chave ser valor e o valor ser chave?? Quais minhas opções??

sub h_energy{ 


my $self = shift;

my $data = $self->h_data || die "cannot find data";

my $file = file("$data")->openr();

my %hmfe = (); 
my $mirna;

my $record;

 
while (my $linha = <$file>) {

if ( $linha =~ m{target:.*} ) {

$record = $linha . $record if ($record);

$hmfe{$mirna} = $record if ($mirna);

$mirna = $+{mirna};

$record = q() if ($record);

}

elsif ($linha =~ m{mfe:\s+(\S+)\s+kcal/mol}){

$mirna = $1;

$record .= $linha;

}

 else {

$record .= $linha;

 }

}

return %hmfe;

}

> Date: Fri, 30 Nov 2012 10:30:17 -0200
> From: thiagogla...@ticursos.net
> To: rio-pm@pm.org


> Subject: Re: [Rio-pm] Chaves de hash
> 
> Hashs não têm mais de uma chave igual. Ele vai mudar o valor 
> relacionado à chave e não criar outra chave com o mesmo valor.
> 
> Em 2012-11-30 00:24, Aureliano Guedes escreveu:


> > Bruno, no meu if funcionou tanto com && quanto com and. O meu erro
> > mesmo foi que a regex pegava um espasso.
> >
> > Bem a minha duvida ficou em "porque seria problematico colocar reais


> > em chaves de hash no meu caso?"
> >
> > Se eu fosse pesquisar um valor especifico e tivesse duas ou mais
> > chaves com o mesmo valor real seria problema
> > mas no meu caso umporta que o valor esteja em um determinado


> > intervalo, podem ter 20 chaves iguais, estando no intervalo
> > eu quero os 20 valores. 49??
> >
> > -
> > From: leonardo.bal...@gmail.com


> > Date: Fri, 30 Nov 2012 00:15:50 -0200
> > To: rio-pm@pm.org
> > Subject: Re: [Rio-pm] Chaves de hash
> >
> > Quero participar dessa discussao antes do 50.


> >
> > Por que tanta peculiariade na dicotomia de popular?
> >
> > Na buzilis da cizania ja nao era mais sobre Perl ou foi impressao 
> > minha?
> >
> > Leo Balter - via mobile


> >
> > Em 30/11/2012, às 00:02, Marcio Ferreira
> >  escreveu:
> >
> >> 47


> >>
> >> On Nov 29, 2012 11:35 PM, "Renato Santos"  
> >> wrote:
> >>
> >>> #define float_epsilon 0.1;


> >>> #define float_equal(a,b) (fabs((a) - (b)) < float_epsilon)
> >>>
> >>> BTW
> >>>
> >>> 2012/11/29 Blabos de Blebe 


> >>>
>  float_equal
> >>>
> >>> --
> >>>
> >>> Saravá,
> >>> Renato CRON
> >>>
> >>> http://www.renatocron.com/blog/ [1]


> >>> @renato_cron [2]
> >>>
> >>> ___
> >>> Rio-pm mailing list
> >>> Rio-pm@pm.org


> >>> http://mail.pm.org/mailman/listinfo/rio-pm [3]
> >
> >> ___
> >> Rio-pm mailing list


> >> Rio-pm@pm.org
> >> http://mail.pm.org/mailman/listinfo/rio-pm [3]
> >


> > ___ Rio-pm mailing list
> > Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm


> >
> > Links:
> > --
> > [1] http://www.renatocron.com/blog/
> > [2] http://twitter.com/#%21/renato_cron


> > [3] http://mail.pm.org/mailman/listinfo/rio-pm
> >
> > ___
> > Rio-pm mailing list


> > Rio-pm@pm.org
> > http://mail.pm.org/mailman/listinfo/rio-pm
> 
> ___


> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm


  

___

Rio-pm mailing list

Rio-pm@pm.org

http://mail.pm.org/mailman/listinfo/rio-pm


-- 
Saravá,

Renato CRONhttp://www.renatocron.com/blog/

@renato_cron



_

Re: [Rio-pm] Chaves de hash

2012-11-30 Por tôpico thiagoglauco

Biólogo não, biomedico

Putz, really sorry!!! 2 gaf.


Agora sim, isso é um problemão. Estarei perdendo dados assim.

Sim, estará perdendo dados.


Faria a chave ser valor e o valor ser chave?? Quais minhas opções??
Não entendo de biomedicina, mas acho que deveriamos pensar em algo como 
uma estrutura de dados mas bem planejada. Por que você está usando o 
valor de calorias como chave do hash?


Se você criar uma estrutura mais complexa, como array de hashs ou mesmo 
um array de objetos... opções não faltam.


Em 2012-11-30 10:37, Aureliano Guedes escreveu:
Biólogo não, biomedico, acredite essa diferença fere nossos 
sentimentos. hahaha



Hashs não têm mais de uma chave igual. Ele vai mudar o valor
relacionado à chave e não criar outra chave com o mesmo valor.


Agora sim, isso é um problemão. Estarei perdendo dados assim.

Como poderia reverter isso então??

Faria a chave ser valor e o valor ser chave?? Quais minhas opções??

sub h_energy{
 my $self = shift;
 my $data = $self->h_data || die "cannot find data";
 my $file = file("$data")->openr();
 my %hmfe = ();
 my $mirna;
 my $record;

 while (my $linha = <$file>) {
 if ( $linha =~ m{target:.*} ) {
 $record = $linha . $record if ($record);
 $hmfe{$mirna} = $record if ($mirna);
 $mirna = $+{mirna};
 $record = q() if ($record);
 }
 elsif ($linha =~ m{mfe:s+(S+)s+kcal/mol}){
 $mirna = $1;
 $record .= $linha;
 }
 else {
 $record .= $linha;
 }
 }
 return %hmfe;
}


Date: Fri, 30 Nov 2012 10:30:17 -0200
From: thiagogla...@ticursos.net
To: rio-pm@pm.org
Subject: Re: [Rio-pm] Chaves de hash

Hashs não têm mais de uma chave igual. Ele vai mudar o valor
relacionado à chave e não criar outra chave com o mesmo valor.

Em 2012-11-30 00:24, Aureliano Guedes escreveu:
> Bruno, no meu if funcionou tanto com && quanto com and. O meu erro
> mesmo foi que a regex pegava um espasso.
>
> Bem a minha duvida ficou em "porque seria problematico colocar 
reais

> em chaves de hash no meu caso?"
>
> Se eu fosse pesquisar um valor especifico e tivesse duas ou mais
> chaves com o mesmo valor real seria problema
> mas no meu caso umporta que o valor esteja em um determinado
> intervalo, podem ter 20 chaves iguais, estando no intervalo
> eu quero os 20 valores. 49??
>
> -
> From: leonardo.bal...@gmail.com
> Date: Fri, 30 Nov 2012 00:15:50 -0200
> To: rio-pm@pm.org
> Subject: Re: [Rio-pm] Chaves de hash
>
> Quero participar dessa discussao antes do 50.
>
> Por que tanta peculiariade na dicotomia de popular?
>
> Na buzilis da cizania ja nao era mais sobre Perl ou foi impressao
> minha?
>
> Leo Balter - via mobile
>
> Em 30/11/2012, às 00:02, Marcio Ferreira
>  escreveu:
>
>> 47
>>
>> On Nov 29, 2012 11:35 PM, "Renato Santos" 
>> wrote:
>>
>>> #define float_epsilon 0.1;
>>> #define float_equal(a,b) (fabs((a) - (b)) < float_epsilon)
>>>
>>> BTW
>>>
>>> 2012/11/29 Blabos de Blebe 
>>>
 float_equal
>>>
>>> --
>>>
>>> Saravá,
>>> Renato CRON
>>>
>>> http://www.renatocron.com/blog/ [1]
>>> @renato_cron [2]
>>>
>>> ___
>>> Rio-pm mailing list
>>> Rio-pm@pm.org
>>> http://mail.pm.org/mailman/listinfo/rio-pm [3]
>
>> ___
>> Rio-pm mailing list
>> Rio-pm@pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm [3]
>
> ___ Rio-pm mailing 
list

> Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm
>
> Links:
> --
> [1] http://www.renatocron.com/blog/
> [2] http://twitter.com/#%21/renato_cron
> [3] http://mail.pm.org/mailman/listinfo/rio-pm
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm

___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


Re: [Rio-pm] Chaves de hash

2012-11-30 Por tôpico Renato Santos
faça o push (só que sem a funcao),

outra forma, porque não usar uma array ? e ai você coloca assim:

 my @hmfe;

  while (..){ ...
  push @hmfe, {valor => $mirna, registro => $record};
  ...
  }


e ai você faria o seu loop pra encontrar o valor mudando apenas

$keys por $linha->{valor}

foreach my $linha (@hmfe){
   ... if ..
}

-
uma coisa: eu vi que sua funcao lá de intervalo está criando tudo de novo,
dependendo do caso, você pode fazer a leitura apenas uma vez, retornar
o @hmfe (em referencia {  return \@hmfe }, para nao duplicar na memoria) e
depois usar ele na funcao que recebe o intervalo e retorna os registros.

2012/11/30 Aureliano Guedes 

>  Biólogo não, biomedico, acredite essa diferença fere nossos sentimentos.
> hahaha
>
>
> > Hashs não têm mais de uma chave igual. Ele vai mudar o valor
> > relacionado à chave e não criar outra chave com o mesmo valor.
>
> Agora sim, isso é um problemão. Estarei perdendo dados assim.
>
> Como poderia reverter isso então??
>
> Faria a chave ser valor e o valor ser chave?? Quais minhas opções??
>
> sub h_energy{
> my $self = shift;
> my $data = $self->h_data || die "cannot find data";
> my $file = file("$data")->openr();
> my %hmfe = ();
> my $mirna;
> my $record;
>
> while (my $linha = <$file>) {
> if ( $linha =~ m{target:.*} ) {
> $record = $linha . $record if ($record);
> $hmfe{$mirna} = $record if ($mirna);
> $mirna = $+{mirna};
> $record = q() if ($record);
> }
> elsif ($linha =~ m{mfe:\s+(\S+)\s+kcal/mol}){
> $mirna = $1;
> $record .= $linha;
> }
>  else {
> $record .= $linha;
>  }
> }
> return %hmfe;
> }
>
> > Date: Fri, 30 Nov 2012 10:30:17 -0200
> > From: thiagogla...@ticursos.net
>
> > To: rio-pm@pm.org
> > Subject: Re: [Rio-pm] Chaves de hash
> >
> > Hashs não têm mais de uma chave igual. Ele vai mudar o valor
> > relacionado à chave e não criar outra chave com o mesmo valor.
> >
> > Em 2012-11-30 00:24, Aureliano Guedes escreveu:
> > > Bruno, no meu if funcionou tanto com && quanto com and. O meu erro
> > > mesmo foi que a regex pegava um espasso.
> > >
> > > Bem a minha duvida ficou em "porque seria problematico colocar reais
> > > em chaves de hash no meu caso?"
> > >
> > > Se eu fosse pesquisar um valor especifico e tivesse duas ou mais
> > > chaves com o mesmo valor real seria problema
> > > mas no meu caso umporta que o valor esteja em um determinado
> > > intervalo, podem ter 20 chaves iguais, estando no intervalo
> > > eu quero os 20 valores. 49??
> > >
> > > -
> > > From: leonardo.bal...@gmail.com
> > > Date: Fri, 30 Nov 2012 00:15:50 -0200
> > > To: rio-pm@pm.org
> > > Subject: Re: [Rio-pm] Chaves de hash
> > >
> > > Quero participar dessa discussao antes do 50.
> > >
> > > Por que tanta peculiariade na dicotomia de popular?
> > >
> > > Na buzilis da cizania ja nao era mais sobre Perl ou foi impressao
> > > minha?
> > >
> > > Leo Balter - via mobile
> > >
> > > Em 30/11/2012, às 00:02, Marcio Ferreira
> > >  escreveu:
> > >
> > >> 47
> > >>
> > >> On Nov 29, 2012 11:35 PM, "Renato Santos" 
> > >> wrote:
> > >>
> > >>> #define float_epsilon 0.1;
> > >>> #define float_equal(a,b) (fabs((a) - (b)) < float_epsilon)
> > >>>
> > >>> BTW
> > >>>
> > >>> 2012/11/29 Blabos de Blebe 
> > >>>
> >  float_equal
> > >>>
> > >>> --
> > >>>
> > >>> Saravá,
> > >>> Renato CRON
> > >>>
> > >>> http://www.renatocron.com/blog/ [1]
> > >>> @renato_cron [2]
> > >>>
> > >>> ___
> > >>> Rio-pm mailing list
> > >>> Rio-pm@pm.org
> > >>> http://mail.pm.org/mailman/listinfo/rio-pm [3]
> > >
> > >> ___
> > >> Rio-pm mailing list
> > >> Rio-pm@pm.org
> > >> http://mail.pm.org/mailman/listinfo/rio-pm [3]
> > >
> > > ___ Rio-pm mailing list
> > > Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm
> > >
> > > Links:
> > > --
> > > [1] http://www.renatocron.com/blog/
> > > [2] http://twitter.com/#%21/renato_cron
> > > [3] http://mail.pm.org/mailman/listinfo/rio-pm
> > >
> > > ___
> > > Rio-pm mailing list
> > > Rio-pm@pm.org
> > > http://mail.pm.org/mailman/listinfo/rio-pm
> >
> > ___
> > Rio-pm mailing list
> > Rio-pm@pm.org
> > http://mail.pm.org/mailman/listinfo/rio-pm
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
Saravá,
Renato CRON
http://www.renatocron.com/blog/
@renato_cron 
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-30 Por tôpico Aureliano Guedes

Biólogo não, biomedico, acredite essa diferença fere nossos sentimentos. hahaha

> Hashs não têm mais de uma chave igual. Ele vai mudar o valor 
> relacionado à chave e não criar outra chave com o mesmo valor.

Agora sim, isso é um problemão. Estarei perdendo dados assim.

Como poderia reverter isso então??

Faria a chave ser valor e o valor ser chave?? Quais minhas opções??

sub h_energy{ 
my $self = shift;

my $data = $self->h_data || die "cannot find data";

my $file = file("$data")->openr();

my %hmfe = (); 
my $mirna;

my $record;

 
while (my $linha = <$file>) {

if ( $linha =~ m{target:.*} ) {

$record = $linha . $record if ($record);

$hmfe{$mirna} = $record if ($mirna);

$mirna = $+{mirna};

$record = q() if ($record);

}

elsif ($linha =~ m{mfe:\s+(\S+)\s+kcal/mol}){

$mirna = $1;

$record .= $linha;

}

 else {

$record .= $linha;

 }

}

return %hmfe;

}

> Date: Fri, 30 Nov 2012 10:30:17 -0200
> From: thiagogla...@ticursos.net
> To: rio-pm@pm.org
> Subject: Re: [Rio-pm] Chaves de hash
> 
> Hashs não têm mais de uma chave igual. Ele vai mudar o valor 
> relacionado à chave e não criar outra chave com o mesmo valor.
> 
> Em 2012-11-30 00:24, Aureliano Guedes escreveu:
> > Bruno, no meu if funcionou tanto com && quanto com and. O meu erro
> > mesmo foi que a regex pegava um espasso.
> >
> > Bem a minha duvida ficou em "porque seria problematico colocar reais
> > em chaves de hash no meu caso?"
> >
> > Se eu fosse pesquisar um valor especifico e tivesse duas ou mais
> > chaves com o mesmo valor real seria problema
> > mas no meu caso umporta que o valor esteja em um determinado
> > intervalo, podem ter 20 chaves iguais, estando no intervalo
> > eu quero os 20 valores. 49??
> >
> > -
> > From: leonardo.bal...@gmail.com
> > Date: Fri, 30 Nov 2012 00:15:50 -0200
> > To: rio-pm@pm.org
> > Subject: Re: [Rio-pm] Chaves de hash
> >
> > Quero participar dessa discussao antes do 50.
> >
> > Por que tanta peculiariade na dicotomia de popular?
> >
> > Na buzilis da cizania ja nao era mais sobre Perl ou foi impressao 
> > minha?
> >
> > Leo Balter - via mobile
> >
> > Em 30/11/2012, às 00:02, Marcio Ferreira
> >  escreveu:
> >
> >> 47
> >>
> >> On Nov 29, 2012 11:35 PM, "Renato Santos"  
> >> wrote:
> >>
> >>> #define float_epsilon 0.1;
> >>> #define float_equal(a,b) (fabs((a) - (b)) < float_epsilon)
> >>>
> >>> BTW
> >>>
> >>> 2012/11/29 Blabos de Blebe 
> >>>
>  float_equal
> >>>
> >>> --
> >>>
> >>> Saravá,
> >>> Renato CRON
> >>>
> >>> http://www.renatocron.com/blog/ [1]
> >>> @renato_cron [2]
> >>>
> >>> ___
> >>> Rio-pm mailing list
> >>> Rio-pm@pm.org
> >>> http://mail.pm.org/mailman/listinfo/rio-pm [3]
> >
> >> ___
> >> Rio-pm mailing list
> >> Rio-pm@pm.org
> >> http://mail.pm.org/mailman/listinfo/rio-pm [3]
> >
> > ___ Rio-pm mailing list
> > Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm
> >
> > Links:
> > --
> > [1] http://www.renatocron.com/blog/
> > [2] http://twitter.com/#%21/renato_cron
> > [3] http://mail.pm.org/mailman/listinfo/rio-pm
> >
> > ___
> > Rio-pm mailing list
> > Rio-pm@pm.org
> > http://mail.pm.org/mailman/listinfo/rio-pm
> 
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
  ___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-30 Por tôpico thiagoglauco
Hashs não têm mais de uma chave igual. Ele vai mudar o valor 
relacionado à chave e não criar outra chave com o mesmo valor.


Em 2012-11-30 00:24, Aureliano Guedes escreveu:

Bruno, no meu if funcionou tanto com && quanto com and. O meu erro
mesmo foi que a regex pegava um espasso.

Bem a minha duvida ficou em "porque seria problematico colocar reais
em chaves de hash no meu caso?"

Se eu fosse pesquisar um valor especifico e tivesse duas ou mais
chaves com o mesmo valor real seria problema
mas no meu caso umporta que o valor esteja em um determinado
intervalo, podem ter 20 chaves iguais, estando no intervalo
eu quero os 20 valores. 49??

-
From: leonardo.bal...@gmail.com
Date: Fri, 30 Nov 2012 00:15:50 -0200
To: rio-pm@pm.org
Subject: Re: [Rio-pm] Chaves de hash

Quero participar dessa discussao antes do 50.

Por que tanta peculiariade na dicotomia de popular?

Na buzilis da cizania ja nao era mais sobre Perl ou foi impressao 
minha?


Leo Balter - via mobile

Em 30/11/2012, às 00:02, Marcio Ferreira
 escreveu:


47

On Nov 29, 2012 11:35 PM, "Renato Santos"  
wrote:



#define float_epsilon 0.1;
#define float_equal(a,b) (fabs((a) - (b)) < float_epsilon)

BTW

2012/11/29 Blabos de Blebe 


float_equal


--

Saravá,
Renato CRON

http://www.renatocron.com/blog/ [1]
@renato_cron [2]

___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm [3]



___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm [3]


___ Rio-pm mailing list
Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm

Links:
--
[1] http://www.renatocron.com/blog/
[2] http://twitter.com/#%21/renato_cron
[3] http://mail.pm.org/mailman/listinfo/rio-pm

___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


Re: [Rio-pm] Chaves de hash

2012-11-30 Por tôpico thiagoglauco


#define float_epsilon 0.1;
#define float_equal(a,b) (fabs((a) - (b)) < float_epsilon)

Com esse define de float_equal e float_epsilon acho que funcionaria.

Em 2012-11-29 23:27, Blabos de Blebe escreveu:

Um exemplo hipotético...

Suponha que não haja escapatória e tenha-se que comparar 
flutuantes...


if ( float_equal( $a, $b ) ) {
say 'igual';
}
elsif ( $a < $b && !float_equal( $a, $b ) ) {
say 'menor';
}
else {
say 'maior';
}

Será que funciona?

2012/11/29  :

Um exemplo mais preciso:

$ uname -a
SunOS cg01spo 5.10 Generic_13-03 sun4v sparc 
SUNW,SPARC-Enterprise-T5120


$ perl -E '
if (0.2 > 0.19997){
say "0.2 is greater than 0.19997";}

else {
say "Floating Point is not true real"};'
0.2 is greater than 0.19997
$

$ perl -E '
if (0.2 > 0.19998){
say "0.2 is greater than 0.19998";}

else {
say "Floating Point is not true real"};'
Floating Point is not true real
$

Por que é importante saber essas coisas?
http://ta.twi.tudelft.nl/users/vuik/wi211/disasters.html






Em 2012-11-29 15:13, thiagogla...@ticursos.net escreveu:


Não se compara reais por igualdade.


Se você tem erro na igualdade, terá nas outras comparações se a
diferença entre os números for menor que o maior acréscimo 
suportado

pela plataforma:

$ perl -E '
if (0.2 > 0.1999){


say "0.2 is greater than 
0.19";}

else {
say "Floating Point is not true real"};'


Floating Point is not true real
$

$ perl -E '
if (0.2 > 0.19){
say "0.2 is greater than 0.19";}
else {
say "Floating Point is not true real"};'
0.2 is greater than 0.19
$

Então, comparar pontos flutuantes não é seguro. Nem igualdade, nem
maio, nem menor.

E mais: garanto que se você quer usar um número real como chave de
Hash você tem um problema na análise da lógica do problema que está
enfrentando e como solucioná-lo.


Em 2012-11-29 10:36, Blabos de Blebe escreveu:


Na verdade é o contrário, não?

Não se compara reais por igualdade.

Se você usa reais como chaves de hash, você tem algum problema...

Ao não controlar a representação interna em ponto flutuante, você 
pode

nunca mais alcançar o valor relacionado à chave, se usar um número
real como chave, pois qualquer bit diferente, mesmo que 
arredondando

no mesmo número vai resultar num cálculo diferente na tabela hash.

Igualdade entre númros reais constuma ser definida como algo 
assim:


sub float_equal {
my ($first, $second) = @_;
my $threshold = 0.0001 # arbitrário
return abs( $first - $second ) < $threshold;
}

Converter para string antes de usar como chave de hash também não 
me
parece saudável, pois, embora a string vá funcionar bem no hash, 
você
não garante que a conversão vai resultar sempre na mesma string, e 
aí

vc se ferra do mesmo jeito.

Por outro lado, se você nunca vai acessar o elemento do hash 
através

da chave, um foreach por keys() ou values() vai te retornar os
valores...

Mas aí eu te perguntaria por que rails você está usando hash pra 
isso...




On Thu, Nov 29, 2012 at 6:47 AM,   
wrote:


Existe um problema aqui, diferente da comparação.
A comparação de reais é problemática devido a estrutura interna 
do ponto
flutuante. NÃO SE COMPARA REAIS POR MAIOR OU MENOR.Isso não é do 
Perl,

mas
das regras de aproximação usada pelos processadores.

Rounding rules

The standard defines five rounding rules. The first two round to 
a

nearest
value; the others are called directed roundings:
Roundings to nearest

Round to nearest, ties to even – rounds to the nearest value; 
if the
number falls midway it is rounded to the nearest value with an 
even

(zero)
least significant bit, which occurs 50% of the time; this is the 
default

for
binary floating-point and the recommended default for decimal.
Round to nearest, ties away from zero – rounds to the nearest 
value;

if
the number falls midway it is rounded to the nearest value above 
(for
positive numbers) or below (for negative numbers); this is 
intended as

an
option for decimal floating point.

Directed roundings

Round toward 0 – directed rounding towards zero (also known 
as

truncation).
Round toward +∞ – directed rounding towards positive infinity 
(also

known as rounding up or ceiling).
Round toward −∞ – directed rounding towards negative infinity 
(also

known as rounding down or floor).

Se a comparação for inevitável, converta o seu número para string 
e

compare
ou determine um nível de precisão aceitável e faça bit a bit.

Em 2012-11-28 21:42, Aureliano Guedes escreveu:



Ola Monges.

Estou com um problema simples mas que não acho a solução.

Eu tenho um hash onde as chaves são valores numericos reais (a
maioria negativo e quase nenhum inteiro).
Estou limitando esses valores por um maximo e um minimo.

 foreach my $keys (keys %d) {
 if ($keys <= $min and $keys >= $max) {
 print "$d{$keys}";
 }
 }

Problema que não da certo.
Ha algo de e

Re: [Rio-pm] Chaves de hash

2012-11-30 Por tôpico thiagoglauco

Não funcionaria em 100% dos casos.

Em 2012-11-29 23:27, Blabos de Blebe escreveu:

Um exemplo hipotético...

Suponha que não haja escapatória e tenha-se que comparar 
flutuantes...


if ( float_equal( $a, $b ) ) {
say 'igual';
}
elsif ( $a < $b && !float_equal( $a, $b ) ) {
say 'menor';
}
else {
say 'maior';
}

Será que funciona?

2012/11/29  :

Um exemplo mais preciso:

$ uname -a
SunOS cg01spo 5.10 Generic_13-03 sun4v sparc 
SUNW,SPARC-Enterprise-T5120


$ perl -E '
if (0.2 > 0.19997){
say "0.2 is greater than 0.19997";}

else {
say "Floating Point is not true real"};'
0.2 is greater than 0.19997
$

$ perl -E '
if (0.2 > 0.19998){
say "0.2 is greater than 0.19998";}

else {
say "Floating Point is not true real"};'
Floating Point is not true real
$

Por que é importante saber essas coisas?
http://ta.twi.tudelft.nl/users/vuik/wi211/disasters.html






Em 2012-11-29 15:13, thiagogla...@ticursos.net escreveu:


Não se compara reais por igualdade.


Se você tem erro na igualdade, terá nas outras comparações se a
diferença entre os números for menor que o maior acréscimo 
suportado

pela plataforma:

$ perl -E '
if (0.2 > 0.1999){


say "0.2 is greater than 
0.19";}

else {
say "Floating Point is not true real"};'


Floating Point is not true real
$

$ perl -E '
if (0.2 > 0.19){
say "0.2 is greater than 0.19";}
else {
say "Floating Point is not true real"};'
0.2 is greater than 0.19
$

Então, comparar pontos flutuantes não é seguro. Nem igualdade, nem
maio, nem menor.

E mais: garanto que se você quer usar um número real como chave de
Hash você tem um problema na análise da lógica do problema que está
enfrentando e como solucioná-lo.


Em 2012-11-29 10:36, Blabos de Blebe escreveu:


Na verdade é o contrário, não?

Não se compara reais por igualdade.

Se você usa reais como chaves de hash, você tem algum problema...

Ao não controlar a representação interna em ponto flutuante, você 
pode

nunca mais alcançar o valor relacionado à chave, se usar um número
real como chave, pois qualquer bit diferente, mesmo que 
arredondando

no mesmo número vai resultar num cálculo diferente na tabela hash.

Igualdade entre númros reais constuma ser definida como algo 
assim:


sub float_equal {
my ($first, $second) = @_;
my $threshold = 0.0001 # arbitrário
return abs( $first - $second ) < $threshold;
}

Converter para string antes de usar como chave de hash também não 
me
parece saudável, pois, embora a string vá funcionar bem no hash, 
você
não garante que a conversão vai resultar sempre na mesma string, e 
aí

vc se ferra do mesmo jeito.

Por outro lado, se você nunca vai acessar o elemento do hash 
através

da chave, um foreach por keys() ou values() vai te retornar os
valores...

Mas aí eu te perguntaria por que rails você está usando hash pra 
isso...




On Thu, Nov 29, 2012 at 6:47 AM,   
wrote:


Existe um problema aqui, diferente da comparação.
A comparação de reais é problemática devido a estrutura interna 
do ponto
flutuante. NÃO SE COMPARA REAIS POR MAIOR OU MENOR.Isso não é do 
Perl,

mas
das regras de aproximação usada pelos processadores.

Rounding rules

The standard defines five rounding rules. The first two round to 
a

nearest
value; the others are called directed roundings:
Roundings to nearest

Round to nearest, ties to even – rounds to the nearest value; 
if the
number falls midway it is rounded to the nearest value with an 
even

(zero)
least significant bit, which occurs 50% of the time; this is the 
default

for
binary floating-point and the recommended default for decimal.
Round to nearest, ties away from zero – rounds to the nearest 
value;

if
the number falls midway it is rounded to the nearest value above 
(for
positive numbers) or below (for negative numbers); this is 
intended as

an
option for decimal floating point.

Directed roundings

Round toward 0 – directed rounding towards zero (also known 
as

truncation).
Round toward +∞ – directed rounding towards positive infinity 
(also

known as rounding up or ceiling).
Round toward −∞ – directed rounding towards negative infinity 
(also

known as rounding down or floor).

Se a comparação for inevitável, converta o seu número para string 
e

compare
ou determine um nível de precisão aceitável e faça bit a bit.

Em 2012-11-28 21:42, Aureliano Guedes escreveu:



Ola Monges.

Estou com um problema simples mas que não acho a solução.

Eu tenho um hash onde as chaves são valores numericos reais (a
maioria negativo e quase nenhum inteiro).
Estou limitando esses valores por um maximo e um minimo.

 foreach my $keys (keys %d) {
 if ($keys <= $min and $keys >= $max) {
 print "$d{$keys}";
 }
 }

Problema que não da certo.
Ha algo de errado aqui??

___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/lis

Re: [Rio-pm] Chaves de hash

2012-11-30 Por tôpico thiagoglauco

Eu devo ser muito estúpido... mas alguém que está falando isso (ja é
o 3o), poderia fazer o favor de me explicar porque ele deve usar && 
no

lugar do 'and' e qual diferença isso faz no caso deste if específico?
E em quais situações deve-se usar o 'and' no lugar de &&?


Não é estúpido não. Vamos analisar a tabela da verdade da função and ou 
&&:


0 x 0 = 0
0 x 1 = 0
1 x 0 = 0
1 x 1 = 1

Então, no if do código do nosso biólogo não haveria impacto real, sorry 
eu me deixei levar por outras coisas que estava pensando aqui.


Mas voltando ao if:
if($keys >= $min and $keys <= $max)

O operador de short circuit só avaliaria a expresssão da direita ($keys 
<= $max) se a primeira expressão for verdadeira. Ou seja, se $keys for 
menor que $min o Perl nem vai perder tempo checando pois 0 x N = 0. 
Então aqui eu me enganei, não ia fazer diferença no código do nosso 
colega.


Por outro lado, vamos supor um caso que você queira aproveitar o teste 
if e executar duas subs na mesma linha de código:


if ( &foo and &bar ){
   ...faça alguma coisa
}
else {
   ... &bar só será executada se &foo retornar true
}

por outro lado:

if ( &foo && &bar ){
   ...&foo e &bar foram executadas. faça alguma coisa
}
else {
   ... &foo e &bar foram executadas mesmo com o && retornando false.
}

essa é a diferença.

Em 2012-11-29 22:09, Bruno Buss escreveu:

2012/11/29 

Seu primeiro erro é o operador and. No documento perlop: $ perldoc 
perlop você vai descobrir o seguinte:


 " Logical And
     Binary "and" returns the logical conjunction of the two
     surrounding expressions.  It's equivalent to && except for
     the very low precedence.  This means that it short-circuits:
     i.e., the right expression is evaluated only if the left
     expression is true.
[...]
  C-style Logical And
     Binary "&&" performs a short-circuit logical AND operation.
     That is, if the left operand is false, the right operand is
     not even evaluated.  Scalar or list context propagates down
     to the right operand if it is evaluated."

Logo, seu código

if($keys >= $min and $keys <= $max){

deveria ser if($keys >= $min && $keys <= $max){


Eu devo ser muito estúpido... mas alguém que está falando isso (ja é
o 3o), poderia fazer o favor de me explicar porque ele deve usar && 
no

lugar do 'and' e qual diferença isso faz no caso deste if específico?
E em quais situações deve-se usar o 'and' no lugar de &&?

[ ]'s--
Bruno C. Buss
http://www.brunobuss.net [1]


Links:
--
[1] http://www.brunobuss.net

___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


Re: [Rio-pm] Chaves de hash

2012-11-30 Por tôpico Aureliano Guedes

Sua ideia é louvável, mas há um problema.

No Arquivo que eu postei, eu "compilei" de a rotina de um modulo dentro do 
script.
Isso se deve ao fato de eu ter desenvolvido um modulo que parseia todo o 
documento naquele formato
e cria um hash colocando como chave o valor que eu procuro, que pode ser o nome 
do micro-RNA, a energia de ligação,
a posição no gene, ...
Criei esse modulo (que futuramente pretendo adicionar no CPAN ou BioPerl) para 
facilitar minha vida.

Por isso eu já não filtro o intervalo na própria regex.

Quanto ao and e o &&, o && consome menos memória que o and, por ser short 
circuits??

Date: Fri, 30 Nov 2012 06:22:03 -0200
From: tiago.pecze...@gmail.com
To: rio-pm@pm.org
Subject: Re: [Rio-pm] Chaves de hash

Porra o q? To mostrando q eh diferente no contexto q eu conheco...
Em 29/11/2012 23:14, "Blabos de Blebe"  escreveu:

Porra PAC, não pisa fora da faixa, cara! :)



http://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity



É só aplicar as regras de precedência.



Parafraseando o perldoc, and é 'equivalent to && except for the very

low precedence'



É óbvio gente. Assim vcs me envergonham!



Game over.



2012/11/29 Tiago Peczenyj :

> veja este exemplo:

>

> https://gist.github.com/4172935

>

> veja como a execução das subrotinas não é alterada, mas o resultado das

> variaveis é diferente.

>

>

>

> my $x = a and b and c and ok or nok;

>

>

>

>

> my $y = a && b && c && ok || nok;

>

>

> veja que x recebe o valor que a retorna, enquanto y recebe o valor de nok.

>

> isso pq o = esta em termos de precedencia entre o and e o &&

>

>

>

>

> 2012/11/29 Bruno Buss 

>>

>>

>>

>> 2012/11/29 Bruno Buss 

>>>

>>> On Thu, Nov 29, 2012 at 10:13 PM, Renato Santos 

>>> wrote:



 use && sempre e seja feliz, só use and quando você souber oque está

 fazendo.

>>>

>>>

>>> Desculpe mas vou discordar que um bom conselho seja "use && sempre e seja

>>> feliz", ainda mais seguido de "só use and quando você souber oque está

>>> fazendo". Na melhor da hipóteses são sugestões contraditórias... como alguém

>>> deverá saber quando usar o 'and' se apenas usa o && cegamente?

>>>



 o 'and' é praticamente o 'e' da nossa lingua, vc diz pro seu codigo

 'faça isso, e isso', ele não é de comparação, embora faça

>>>

>>>

>>> "ele não é de comparação, embora faça"? Poderia desenvolver melhor, pois

>>> não fui incapaz de entender o que isso significa para um operador lógico

>>> (que a única diferença do outro é a baixa precedência).

>>

>>

>> s/incapaz/capaz/;

>>

>>>

>>>

>>>

>>> E vou repetir a pergunta aqui, antes que ela fique soterrada pelas tricks

>>> de sleep: Qual diferença isso faz no caso deste if específico do Aureliano?

>>> Por que exatamente, no if dele, utilizar o 'and' está incorreto? Porque no

>>> if dele, somente o && "dá certo" como 3 pessoas já disseram?

>>>

>>>

>>> --

>>> Bruno C. Buss

>>> http://www.brunobuss.net

>>

>>

>>

>>

>> --

>> Bruno C. Buss

>> http://www.brunobuss.net

>>

>> ___

>> Rio-pm mailing list

>> Rio-pm@pm.org

>> http://mail.pm.org/mailman/listinfo/rio-pm

>

>

>

>

> --

> Tiago B. Peczenyj

> Linux User #405772

>

> http://pacman.blog.br

>

> ___

> Rio-pm mailing list

> Rio-pm@pm.org

> http://mail.pm.org/mailman/listinfo/rio-pm

___

Rio-pm mailing list

Rio-pm@pm.org

http://mail.pm.org/mailman/listinfo/rio-pm



___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm  
  ___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Chaves de hash

2012-11-30 Por tôpico Tiago Peczenyj
Porra o q? To mostrando q eh diferente no contexto q eu conheco...
Em 29/11/2012 23:14, "Blabos de Blebe"  escreveu:

> Porra PAC, não pisa fora da faixa, cara! :)
>
> http://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity
>
> É só aplicar as regras de precedência.
>
> Parafraseando o perldoc, and é 'equivalent to && except for the very
> low precedence'
>
> É óbvio gente. Assim vcs me envergonham!
>
> Game over.
>
> 2012/11/29 Tiago Peczenyj :
> > veja este exemplo:
> >
> > https://gist.github.com/4172935
> >
> > veja como a execução das subrotinas não é alterada, mas o resultado das
> > variaveis é diferente.
> >
> >
> >
> > my $x = a and b and c and ok or nok;
> >
> >
> >
> >
> > my $y = a && b && c && ok || nok;
> >
> >
> > veja que x recebe o valor que a retorna, enquanto y recebe o valor de
> nok.
> >
> > isso pq o = esta em termos de precedencia entre o and e o &&
> >
> >
> >
> >
> > 2012/11/29 Bruno Buss 
> >>
> >>
> >>
> >> 2012/11/29 Bruno Buss 
> >>>
> >>> On Thu, Nov 29, 2012 at 10:13 PM, Renato Santos  >
> >>> wrote:
> 
>  use && sempre e seja feliz, só use and quando você souber oque está
>  fazendo.
> >>>
> >>>
> >>> Desculpe mas vou discordar que um bom conselho seja "use && sempre e
> seja
> >>> feliz", ainda mais seguido de "só use and quando você souber oque está
> >>> fazendo". Na melhor da hipóteses são sugestões contraditórias... como
> alguém
> >>> deverá saber quando usar o 'and' se apenas usa o && cegamente?
> >>>
> 
>  o 'and' é praticamente o 'e' da nossa lingua, vc diz pro seu codigo
>  'faça isso, e isso', ele não é de comparação, embora faça
> >>>
> >>>
> >>> "ele não é de comparação, embora faça"? Poderia desenvolver melhor,
> pois
> >>> não fui incapaz de entender o que isso significa para um operador
> lógico
> >>> (que a única diferença do outro é a baixa precedência).
> >>
> >>
> >> s/incapaz/capaz/;
> >>
> >>>
> >>>
> >>>
> >>> E vou repetir a pergunta aqui, antes que ela fique soterrada pelas
> tricks
> >>> de sleep: Qual diferença isso faz no caso deste if específico do
> Aureliano?
> >>> Por que exatamente, no if dele, utilizar o 'and' está incorreto?
> Porque no
> >>> if dele, somente o && "dá certo" como 3 pessoas já disseram?
> >>>
> >>>
> >>> --
> >>> Bruno C. Buss
> >>> http://www.brunobuss.net
> >>
> >>
> >>
> >>
> >> --
> >> Bruno C. Buss
> >> http://www.brunobuss.net
> >>
> >> ___
> >> Rio-pm mailing list
> >> Rio-pm@pm.org
> >> http://mail.pm.org/mailman/listinfo/rio-pm
> >
> >
> >
> >
> > --
> > Tiago B. Peczenyj
> > Linux User #405772
> >
> > http://pacman.blog.br
> >
> > ___
> > Rio-pm mailing list
> > Rio-pm@pm.org
> > http://mail.pm.org/mailman/listinfo/rio-pm
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm