ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> boost
boost
[boost] Re: [math constants] a new approach (perhaps)
by Daniel Frey other posts by this author
Mar 2 2004 9:22AM messages near this date
[boost] Re: [math constants] a new approach (perhaps) | [boost] Re: [math constants] a new approach (perhaps)
Thorsten Ottosen wrote:
>  "Daniel Frey" <daniel.frey@[...].de> wrote in message
>  news:c1vlqp$90l$1@[...]..
>  Thorsten Ottosen wrote:
>  [snip]
>  
> >It depends on what exactly you tried. The basic problem is, that T(pi)
> >tries to call a ctor for T, but std::complex has several candidates
> >available. std::complex<double>(std::complex<double>) and
> >std::complex<double>(double) might conflict here, except you don't
> >provide conversion to std::complex<double> for your constants. But you
> >cannot assume this for other UDT. What happens if a UDT has ctors taking
> >float, double and long-double? You can't use your constants any more,
> >even a new conversion to the type directly won't help.
>  
>  Sorry, but I don't get this.
>  
>  complex<float> z = float( pi );
>  
>  should work just fine.

Sure, but what about complex<float>  z = complex<float>(pi)? Indeed, 
think about a generic algorithm:

template<typename T>  T area(const T& r)
{
    return pi * r * r;
}

(or even T(pi)*r*r). You need constants that work well for all types 
with no special treatment of some types.

> >Why
> >shouldn't this scale to pi*pi*t? Or sqrt(pi)*t. The first non-constant
> >should select the type, no matter how the constants are used before.
>  
>  Yeah, I could let pi * pi return a two_pi object.

No. OK, "yes" for this example, but "no" in general. You cannot predict 
all combinations the user could write. Simply providing all possible 
combinations is ridiculous overhead which doesn't scale well. My 
constant library works for any combination, whether predefined (that is, 
there is a real constant pi_square (ha, you got fooled by your own names 
- the naming dilemma! :) ) ) or not.

> >>>From your example file:
> >>
> >>std::cout << pi.get< float >() << std::endl;
> >>
> >>which is float( pi ) spelt more elaborate.
> >
> >As mentioned, this is a very important thing to note that .get<T> is
> >free to return something else than T!
>  
>  maybe not the best way to spell the function then?

I'm open to suggestions. I don't like .get<T> () very much myself, but I 
can't imagine any better solution.

Regards, Daniel

-- 
Daniel Frey

aixigo AG - financial solutions & technology
Schloß-Rahe-Straße 15, 52072 Aachen, Germany
fon: +49 (0)241 936737-42, fax: +49 (0)241 936737-99
eMail: daniel.frey@[...].de, web: http://www.aixigo.de



_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
Thread:
Thorsten Ottosen
Thorsten Ottosen
Daniel Frey
Thorsten Ottosen
Daniel Frey
Thorsten Ottosen
Daniel Frey
Thorsten Ottosen
Guillaume Melquiond
Daniel Frey
Bronek Kozicki
Bronek Kozicki
Bronek Kozicki
Daniel Frey
Bronek Kozicki
Daniel Frey
Daniel Frey
Bronek Kozicki
Daniel Frey
Daniel Frey
Bronek Kozicki
Daniel Frey
Bronek Kozicki
Bronek Kozicki
Daniel Frey
Paul A Bristow
Paul A Bristow
Paul A Bristow
Paul A Bristow
Phil Richards
Daniel Frey
Paul A Bristow
David Abrahams
Paul A Bristow
David Abrahams

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved