|
|
Thorsten Froehlich wrote:
> In article <3fc8a358@news.povray.org> , Wolfgang Wieser <wwi### [at] gmxde>
> wrote:
>
>> Is there any reason to use
>> a/=2.0;
>> instead of
>> a*=0.5;
>> in case a is a float or double variable?
>>
>> After all, 0.5 has an exact representation as float (being
>> 1 * 2^-1). On current CPUs, the latter is faster by a factor
>> of three, IIRC.
>
> Unless you depend on certain precision side effects, the multiplication
> will be sufficient.
>
It would be nice if you could elaborate on this.
I can imagine that
a*=0.2;
results in a precision degeneration compared to
a/=5.0;
(because 0.2 cannot be represented exactly a dual system).
But since 2 and 0.5 can be represented exactly as a float/double,
I cannot imagine any precision decrease when using
a*=0.5;
instead of
a/=2;
(It is simply a decrease-exponent-by-one operation.)
> And it isn't faster by a specific factor. The issues behind
> the speed difference are much more complex. On modern processors,
> multiplications can commonly be fully pipelines, while divisions are an
> iterative process that is not pipelined (because it would take too many
> gates).
>
The factor three or four was not a specific measurement but a rule of
thumb for people doing numerics. It should be a good estimate for
everyday life ;)
Wolfgang
Post a reply to this message
|
|