Re: round avec une certaine precision ?
[ Nouvelle discussion
| Répondre au groupe
|
fr.comp.lang.ruby ]
Sujet: Re: round avec une certaine precision ?
De: unbewusst.s...@weltanschauung.com.invalid (Une Bév ue)
Groupes: fr.comp.lang.ruby
Organisation: Service de news de lacave.net
Date: 22. Nov 2007, 18:45:23
References: 1 2 3
|
F. Senault <fred@lacave.net> wrote:
> >> 44.0 + (91.0 / 100.0) + 10.01 == 54.92
> => false
évidemment MAIS, quand on fait un arrondi, amha, il faut aller jusqu'au
bout, faire aussi une comparaison avec arrondi (eps) :
--- script --------------------------------------------------
#! /usr/bin/env ruby
class Float
def ===( aFloat, eps = 1.0e-10)
begin
raise "Argument \"#{aFloat}\" must be a Float (being of class
#{aFloat.class})." if aFloat.class.to_s != "Float"
( self > aFloat - eps ) && ( self < aFloat + eps )
rescue
puts "An error occurred: #{$!}"
nil
end
end
def aprox( eps = 1.0e-10 )
( self / eps ).round * eps
end
end
vref = 2.0
val = [ 2.00000000002, 2.0000000002, 2.000000002, 2.00000002]
val.each do | v |
puts "#{v} -o-> #{v.aprox}"
puts "( #{vref} ===? #{v} ) = #{( vref === v )}"
end
-------------------------------------------------------------
résultats :
2.00000000002 -o-> 2.0
( 2.0 ===? 2.00000000002 ) = true
2.0000000002 -o-> 2.0000000002
( 2.0 ===? 2.0000000002 ) = false
2.000000002 -o-> 2.000000002
( 2.0 ===? 2.000000002 ) = false
2.00000002 -o-> 2.00000002
( 2.0 ===? 2.00000002 ) = false
MAIS je ne parviens pas à changer la valeur de eps (par défaut à
1.0e-10) en faisant qqc comme :
machin = ( x ===(y, 1.0e-3) )
j'ai tjs une erreur du parser...
--
Une Bévue

|
 cette fonctionnalité est reservée aux membres ayant une session active !
|