I really like to get “real/float” division results. I know that there
are cases where one may need integer results, but for most of my
applications I do not want it. For example for may cairo drawing test at Homepage of Dr. Stefan Salewski unwanted integer results was
a reason for some strange bugs.
For Python there was something like “from future import division” to fix
it. In Ruby we can use 3.to_f / 2 or 3.fdiv 2. I am not really happy
with that notation, because I should use that always to ensure that I
get always my desired result.
Is there a simple way to redefine division, like Pythons “from future
import division”?. I have found a few tricks with Google (which I, still
learning Ruby, do not really understand), but I am no expert, so I do
not want to break something with ugly redefinition tricks.
a = 3/2 # if in irb you should get (3/2) as a reply
a.to_f # should give you 1.5
and thats it!!
mathn is a library that unify’s all the numbers and makes them play well
together, why it’s not loaded by default IDFK… but whatever, nothing’s
perfect right?
On Fri, 2010-12-24 at 08:36 +0900, serialhex wrote:
and thats it!!
mathn is a library that unify’s all the numbers and makes them play well
together, why it’s not loaded by default IDFK… but whatever, nothing’s
perfect right?
-hex
Indeed, now I remember that I have seen this suggestion during my google
searches, some months ago.
May work fine, but it was my impression that that will decrease
performance and increase storage consumption, maybe drastically?
Please note, I do not need the precision of true rationals, float
precision is fine for me. But integer division can produce strange bugs,
if we are working with GTK and Cairo variables – GTK can be integer
like window size, while cairo is float most of the time. So I have done
some divisions, sometimes GTK integers by integer, with
forgetting .to_f. Resulting in undesired results.
For what it’s worth, I read something Matz said once along the lines
that
3/2 should probably be 1.5.
That said, you can monkeypatch integer division to have different
semantics. I would definitely NOT recommend doing this, but it does show
you
the power of Ruby:
class Fixnum
alias :divide
def /(n)
if self % n == 0
self.divide(n)
else
self.to_f / n
end
end
end
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.