r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[RAMBO] The REBOL bug and enhancement database

Ladislav
7-Feb-2007
[2633]
Gabriele: I noticed that two ROUND test cases ceased to work in 2.7 
- this signals, that comparison in 2.7 isn't equivalent to comparison 
in 1.3.2
BrianH
7-Feb-2007
[2634]
Is it better?
Ladislav
7-Feb-2007
[2635]
Brian: if your question is related to my post, then I would answer: 
it depends. The cases are:

not negative? 1E-8 - abs 0.9999999 - mod 99999999.9999999 1
0.1 == round/even/to 0.1 1E-16
BrianH
7-Feb-2007
[2636x2]
Dang, I'd have to refresh my math memory to know what the answers 
to those should be. Still, my preference is to have comparison work 
correctly, and if it didn't before, break backwards compatibility 
and fix the code that depended on the bad comparisons. There can't 
be much of that...
Err on the side of more correct :)
Ladislav
7-Feb-2007
[2638x2]
my preference is to have comparison work correctly

 - this may be a matter of preference, as it looks. Both versions 
 yield:

0.1 + 0.1 + 0.1 = 0.3 ; == true
zero? 0.1 + 0.1 + 0.1 - 0.3 ; == false
:-)
BrianH
7-Feb-2007
[2640]
Where are fixed-point or BCD numbers when you need them? :)
Anton
7-Feb-2007
[2641]
This is just madness. Why do we still put up with this ?
BrianH
7-Feb-2007
[2642]
Because 0.1 is a floating-point value in REBOL, and for that matter 
one that can't be represented exactly, much like 1/3 in decimal.
Maxim
7-Feb-2007
[2643x2]
anton, this is a problem in all floating point... I had serious issues 
in compiling earthquake data over a 30 second period... adding each 
change over and over could amount to moving a building a foot away 
 !
because all of the small discrepancies eventually add-up.
Geomol
7-Feb-2007
[2645]
>> 0.1 + 0.1 + 0.1 - 0.3
== 5.55111512312578E-17

That's not zero! Anyone can see that! ;-)

I think, it's ok, because the way floating-point works. One could 
just do
>> 0.1 + 0.1 + 0.1 - 0.3 < 1e-10
== true
and that's almost zero, right? :-)
Maxim
7-Feb-2007
[2646]
in high-end 3D and games you live with this imperfection daily.
Geomol
7-Feb-2007
[2647]
Just like the real world. Imperfection!
Maxim
7-Feb-2007
[2648x2]
hehe should we define an 'ALMOST func  ?
almost? #"a" "a"  
==true
ICarii
7-Feb-2007
[2650]
i would prefer precision over speed.
Geomol
7-Feb-2007
[2651]
>> almost-zero?: func [v][v < 1e-10]
>> almost-zero? 0.1 + 0.1 + 0.1 - 0.3
== true
BrianH
7-Feb-2007
[2652]
I believe they call the minimum value that floating point values 
can differ before they register as different: Epsilon.
Maxim
7-Feb-2007
[2653x2]
but like brian said... 0.1 cannot  be reprensented in binary ... 
precision is not the issue... you'll never get to that amount exactly.
which is why BCD exists.  these actually are a base-ten counting 
system.
Geomol
7-Feb-2007
[2655x2]
Right! I haven't studied floating-point closely, but it's something 
about powers of 2 added together, and that'll never end up for some 
values.
I guess, we can think of it this way: some values like 0.1 to computer 
floating-point system is like square-root 2 or pi to our human base-ten 
system.
ICarii
7-Feb-2007
[2657]
is the standard double type used in other languages BCD encoded?
Geomol
7-Feb-2007
[2658]
There are just some real numbers, that we can't write down with our 
base-ten system. The same way, computers can't handle some values 
completely.
BrianH
7-Feb-2007
[2659]
ICarii, no, generally double in other languages is the same exact 
type as decimal! in REBOL - for that matter, REBOL uses C double 
internally for decimal! values. BCD is fairly rare outside of programming 
libraries and languages made for financial use, like COBOL.
Anton
7-Feb-2007
[2660]
Yes, I know the *technical reason* why ! :) (we have of course been 
over this before, several times). It was just blowing some steam. 
Never mind me.
Oldes
7-Feb-2007
[2661]
ICarii > "i would prefer precision over speed." - - I would prefere 
speed over precision. But I'm not making any financial calcultions:-)
BrianH
8-Feb-2007
[2662]
I would prefer good enough on both, but failing that I would prefer 
known limits that can be adjusted for in planning.
Maxim
8-Feb-2007
[2663x3]
I just posted a few bugs about the plugin being quite shorthanded 
with the event it receives from the various browsers.
for example, I just discovered that the "enter/return" key is not 
trapped within fields (so by extension isn't sent to the plugin) 
within Internet Explorer.  This specific case is not an issue within 
firefox... but then, neither receive scroll-wheel events... and others 
have posted that the alt+ctrl+shift keys are not detected, and there 
are other event issues too IIRC.

this is quite serious IMHO.
this sort of brings back the "nice toy" effect of REBOL within the 
plugin.  :-(
BrianH
8-Feb-2007
[2666]
Are these events handled by other plugins, like Flash and Java applets?
Maxim
8-Feb-2007
[2667x2]
ah... "enter" key... yes  for sure.
I can't be sure... as I'm no flash expert, but my gut feeling is 
that since actual controls do receive the events... object controls 
should also be able to receive them ... I posted the bug mainly to 
make sure the enter key isn't forgotten... cause that is quite weird.
Graham
8-Feb-2007
[2669x4]
There's a small but significant "bug" in prot-esmtp.r that for most 
users doesn't matter.
the protocol sends a terminating "." to signify the end of an email. 
 But this is not correct.  The RFC specifies that you should send 
crlf "." crlf
and what is actually being sent is  .. lf "." lf
gmail just hangs on this because it is expecting to see crlf "." 
crlf
BrianH
8-Feb-2007
[2673]
Is it sending lf or is it sending the platform-specific line ending?
Graham
8-Feb-2007
[2674x4]
Now if you send  crlf "." crlf to smtp.gmail.com, gmail just then 
drops the line on you.
because the port is opened with /lines, it is actually sending crlf 
"." crlf lf
which gmail does not like at all.
so, you have to send crlf ".^M" instead !
BrianH
8-Feb-2007
[2678]
I think you can open a port with /lines in a way that specifies the 
line ending string.
Graham
8-Feb-2007
[2679x2]
I've only tested this on windows .. will have to see what core does 
on linux
but all the internet protocols use crlf and not lf
BrianH
8-Feb-2007
[2681]
It seems to me that crlf should be specified as the line ending for 
most internet protocols.
Graham
8-Feb-2007
[2682]
yes