Thread overview
std.math.pow
Oct 26, 2008
Saaa
Oct 26, 2008
Johan Granberg
Oct 26, 2008
Saaa
Oct 26, 2008
Saaa
October 26, 2008
?
main.d(118): function std.math.pow called with argument types:
 (double,uint)
matches both:
 std.math.pow(real,uint)
and:
 std.math.pow(real,real)

Also, I use pow(x,2U). Is this the correct function to use or is there a dedicated x*x function?


October 26, 2008
Saaa wrote:

> ?
> main.d(118): function std.math.pow called with argument types:
>  (double,uint)
> matches both:
>  std.math.pow(real,uint)
> and:
>  std.math.pow(real,real)
> 
> Also, I use pow(x,2U). Is this the correct function to use or is there a
> dedicated x*x function?

you can solve that by casting x into real before the call
pow(cast(real)x,2U);
but in this case why not just simply write x*x? personally I think thats both clearer and more efficient.
October 26, 2008
"Johan Granberg" <lijat.meREM@OVEgmail.com> wrote in message news:ge1lob$1b2i$1@digitalmars.com...
> Saaa wrote:
>
>> ?
>> main.d(118): function std.math.pow called with argument types:
>>  (double,uint)
>> matches both:
>>  std.math.pow(real,uint)
>> and:
>>  std.math.pow(real,real)
>>
>> Also, I use pow(x,2U). Is this the correct function to use or is there a
>> dedicated x*x function?
>
> you can solve that by casting x into real before the call
> pow(cast(real)x,2U);

Yes, but why is this necessary?
Isn't there a preference to more matching arguments if all arguments could
be implicitly converted?

> but in this case why not just simply write x*x? personally I think thats both clearer and more efficient.
Well, x is a lot bigger than just x :)


October 26, 2008
On Sun, Oct 26, 2008 at 8:47 AM, Saaa <empty@needmail.com> wrote:
>> you can solve that by casting x into real before the call
>> pow(cast(real)x,2U);
>
> Yes, but why is this necessary?
> Isn't there a preference to more matching arguments if all arguments could
> be implicitly converted?

No.  See the section on function overloading on this page: http://www.digitalmars.com/d/1.0/function.html

So for pow(x, 2u), where x is a double, the match level for both
(real, uint) and (real, real) is "match with implicit conversions."
Therefore, it's an error.
October 26, 2008
Thanks :)

> No.  See the section on function overloading on this page: http://www.digitalmars.com/d/1.0/function.html
>
> So for pow(x, 2u), where x is a double, the match level for both
> (real, uint) and (real, real) is "match with implicit conversions."
> Therefore, it's an error.