[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [gnugo-devel] arend_1_33.5: Try to address VC inconsistencies
From: |
Gunnar Farneback |
Subject: |
Re: [gnugo-devel] arend_1_33.5: Try to address VC inconsistencies |
Date: |
Tue, 16 Apr 2002 21:51:22 +0200 |
User-agent: |
EMH/1.14.1 SEMI/1.14.3 (Ushinoya) FLIM/1.14.2 (Yagi-Nishiguchi) APEL/10.3 Emacs/20.7 (sparc-sun-solaris2.7) (with unibyte mode) |
Arend wrote:
> Looking again at gg_normalize_float, I am not really sure that this function
> can reliably solve the problems. Why should we safely assume that
> 90*0.01 - 90*0.01
> gets computed as equal to zero, if we cannot assume this for
> (1.0-0.1)-(1.0-0.1)?
This is probably a question of evaluation order. Unless the compiler
is so aggressively optimizing code that it inlines gg_normalize_float()
and significantly reorders its operations, I think the function is
safe enough.
> In other words, I think its not true for all systems (i.e. processors)
> that the error in floating point computations is completely deterministic.
> But I don't really know and if someone has more reliable knowledge on that
> I'd be happy to read about it.
I think the floating point operations are sane enough to be
deterministic at the processor level at least. They are certainly not
guaranteed to be associative or distributive but I'm unsure about
commutativity. I'm almost certain that the difference of two identical
(ordinary) values is guaranteed to be zero. It might make a difference
whether the floating point numbers follow the IEEE standard or not,
but I believe anything else is rare. All this is based on only
slightly reliable knowledge though, so it might be a good idea to look
it up.
Interestingly, there is a somewhat unexpected solution to the problem
of consistently ordering presumably equal floating point numbers.
Instead of trying to force them to really be equal, one forces them to
be different! The following is an alternative implementation of
gg_normalize_float():
float
gg_normalize_float(float x, float a)
{
return x + 0.5 * a * gg_drand();
}
It does have some problems though, so I won't propose to use it, but
the underlying idea could be used in some refined form.
/Gunnar
- [gnugo-devel] GNU Go 3.1.32, Daniel Bump, 2002/04/14
- Re: [gnugo-devel] GNU Go 3.1.32, Trevor Morris, 2002/04/14
- Re: [gnugo-devel] GNU Go 3.1.32 - VC inconsistencies, Trevor Morris, 2002/04/15
- Re: [gnugo-devel] GNU Go 3.1.32 - VC inconsistencies, bump, 2002/04/15
- Re: [gnugo-devel] GNU Go 3.1.32 - VC inconsistencies, Gunnar Farneback, 2002/04/15
- Re: [gnugo-devel] GNU Go 3.1.32 - VC inconsistencies, Arend Bayer, 2002/04/15
- Re: [gnugo-devel] GNU Go 3.1.32 - VC inconsistencies, Trevor Morris, 2002/04/15
- [gnugo-devel] arend_1_33.5: Try to address VC inconsistencies, Arend Bayer, 2002/04/16
- Re: [gnugo-devel] arend_1_33.5: Try to address VC inconsistencies, Trevor Morris, 2002/04/16
- Re: [gnugo-devel] arend_1_33.5: Try to address VC inconsistencies,
Gunnar Farneback <=
- Re: [gnugo-devel] arend_1_33.5: Try to address VC inconsistencies, Arend Bayer, 2002/04/16
- [gnugo-devel] Handtalk series update, Jessie Annala, 2002/04/17
- Re: [gnugo-devel] Handtalk series update, Daniel Bump, 2002/04/17
- Re: [gnugo-devel] Handtalk series update, David Fotland, 2002/04/17
- Re: [gnugo-devel] Handtalk series update, bump, 2002/04/17
- Re: [gnugo-devel] arend_1_33.5: Try to address VC inconsistencies, Trevor Morris, 2002/04/17
- Re: [gnugo-devel] arend_1_33.5: Try to address VC inconsistencies, Arend Bayer, 2002/04/22
- Re: [gnugo-devel] GNU Go 3.1.32 - VC inconsistencies, Gunnar Farneback, 2002/04/18
- Re: [gnugo-devel] GNU Go 3.1.32 - VC inconsistencies, Arend Bayer, 2002/04/18
Re: [gnugo-devel] GNU Go 3.1.32, Marco Scheurer, 2002/04/15