
Boost : 
Subject: Re: [boost] [units]  learning to use
From: Janek Kozicki (janek_listy_at_[hidden])
Date: 20111125 08:11:16
Thanks a lot for your help,
few questions follow:
> Try D/double(steps).
ok. I'll do this.
> Matthias, I seem to recall that the
> reason we disabled generic multiplication was that it
> was causing ambiguities with user defined types. Do
> you think it would be a good idea to enable arithmetic
> with any builtin arithmetic type?
it would be great.
> Try boost::math?
oh, of course! :)
const double pi = boost::math::constants::pi<double>();
> > (***)
> > it seems strange that I need to take .value() here. The result is
> > dimensionless, why can't it directly convert to complex<double> ?
> > There is a risk that .value() would be expressed in millimeters or
> > angstroms or whatever (maybe depending on dd), and then .value()
> > would return a wrongly scaled number?
> >
>
> This is an idiosyncrasy of overload resolution.
> std::complex::operator+= is a template, so an
> implicit conversion doesn't work. The template
> argument can't be deduced.
OK. So I have to use .value().
The question here: should I expect here some scaling problems? For example:
a = 1nm
b = 1km
c = (a/b).value()
Will c become 1.0, with units scaling being lost, due to directly
taking .value() without taking care of unit scaling. Or would it be
correctly 1e12 ?
In my problem I am calculating exponent then multiply and
divide by length. In fact the exponent argument is supposed to be
dimensionless also! And as you see I multiply wavenumber by length.
I assume the conversions to ::one are good here :)
Another queestion:
complex<double> i(0,1);
quantity<wavenumber,complex<double> > k=2*pi/lambda;
// [....]
a += (dd*exp(i*k*r)/r).value();
do I really need to define wavenumber k as being complex? After all
it's multiplied by 'i' so it should get converted automatically?
> > quantity<length> wavelength ( 632.8 *nano*meters);
> > quantity<length> wavelength = 632.8 *nano*meters;
> This isn't assignment. It's copy construction and
> requires an implicit conversion which is forbidden.
why it is forbidden?
I think it would be more convenient to allow this.
best regards
 Janek Kozicki http://janek.kozicki.pl/ 
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk