$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Steven Watanabe (steven_at_[hidden])
Date: 2007-02-13 17:30:08
AMDG
Noah Roberts <roberts.noah <at> gmail.com> writes:
> 
> "Converting the second to match the first" doesn't make sense to me.  I 
> guess you might be talking about operands of '+'?  Yeah, not necessary.
> 
> The answer is pretty simple.  All arithmetic operators work in the base 
> system.  The result is converted on assignment if necessary.
Ok. What happens here:
std::cout << (x + y) << std::endl;
Is the unit printed
a. the unit of x
b. the unit of y
c. the base unit
> 
> > 
> > Both of these require storing twice as much information
> > as the current implementation.
> 
> There is one condition in which that is necessary.  That is if you are 
> using a value that is entered by the user and the calculation loop keeps 
> requesting it from whatever object it is provided by.  Then, in order 
> that the conversion isn't repeatedly done you would want to store two 
> values...the user entered value and the converted value.  The reason you 
> wouldn't just store the converted value is double creep...the number 
> might change on the user.  I imagine that a developer who needs to can 
> work with this so that it does not happen...so that the calculation loop 
> is not asking for the same conversion on the same value repeatedly.
> 
> Any other time it is sufficient that you keep only the user entered 
> value and the unit (ie the conversion factor) to translate it into the 
> base system...OR...the converted value in the base system without a 
> conversion factor.
> 
The former is exactly what I said.  It stores
two doubles instead of one. Further,
temp = a + b;
c = temp * d;
is not equivalent to
c = d * (a + b);
Every operation incurs an extra multiplication
per operand.  This is a far cry from zero overhead.
The latter does not have any significant
benefit over the current implementation.
In Christ,
Steven Watanabe