Thread overview
D do not know which function to use apparently
Dec 11, 2018
Narxa
Dec 11, 2018
Adam D. Ruppe
Dec 11, 2018
Narxa
Dec 11, 2018
Narxa
Dec 11, 2018
Andrea Fontana
December 11, 2018
Hello, people!


The following case:
-------------------
int var = floor(sqrt(n)) // where 'n' is a 'const int'

Produces the following error:
-----------------------------
Error: std.math.sqrt called with argument types (const(int)) matches both:
/usr/include/dmd/phobos/std/math.d(2067):     std.math.sqrt(float x)
and:
/usr/include/dmd/phobos/std/math.d(2073):     std.math.sqrt(real x)


Please, could you tell me how do I solve this?!

Thank you!
December 11, 2018
On Tuesday, 11 December 2018 at 14:16:05 UTC, Narxa wrote:
> int var = floor(sqrt(n)) // where 'n' is a 'const int'

You can just cast it to float:

floor(sqrt( cast(float) n ));

and it will work.
December 11, 2018
On Tuesday, 11 December 2018 at 14:22:30 UTC, Adam D. Ruppe wrote:
> On Tuesday, 11 December 2018 at 14:16:05 UTC, Narxa wrote:
>> int var = floor(sqrt(n)) // where 'n' is a 'const int'
>
> You can just cast it to float:
>
> floor(sqrt( cast(float) n ));
>
> and it will work.

It produced the following error:
--------------------------------
Error: cannot implicitly convert expression floor(sqrt(cast(float)n)) of type float to int


I am using 'dmd' compiler if it matters.
December 11, 2018
On 12/11/18 9:47 AM, Narxa wrote:
> On Tuesday, 11 December 2018 at 14:22:30 UTC, Adam D. Ruppe wrote:
>> On Tuesday, 11 December 2018 at 14:16:05 UTC, Narxa wrote:
>>> int var = floor(sqrt(n)) // where 'n' is a 'const int'
>>
>> You can just cast it to float:
>>
>> floor(sqrt( cast(float) n ));
>>
>> and it will work.
> 
> It produced the following error:
> --------------------------------
> Error: cannot implicitly convert expression floor(sqrt(cast(float)n)) of type float to int
> 
> 
> I am using 'dmd' compiler if it matters.

You need to cast the result back to int.

-Steve
December 11, 2018
On Tuesday, 11 December 2018 at 14:53:02 UTC, Steven Schveighoffer wrote:
> On 12/11/18 9:47 AM, Narxa wrote:
>> On Tuesday, 11 December 2018 at 14:22:30 UTC, Adam D. Ruppe wrote:
>>> On Tuesday, 11 December 2018 at 14:16:05 UTC, Narxa wrote:
>>>> int var = floor(sqrt(n)) // where 'n' is a 'const int'
>>>
>>> You can just cast it to float:
>>>
>>> floor(sqrt( cast(float) n ));
>>>
>>> and it will work.
>> 
>> It produced the following error:
>> --------------------------------
>> Error: cannot implicitly convert expression floor(sqrt(cast(float)n)) of type float to int
>> 
>> 
>> I am using 'dmd' compiler if it matters.
>
> You need to cast the result back to int.
>
> -Steve

Yes, it worked:
---------------
int var = cast(int) floor(sqrt( cast(float) n ));


I thought floor already returned an 'int' but I was mistaken.

Thank you very much.
December 11, 2018
On Tuesday, 11 December 2018 at 15:17:10 UTC, Narxa wrote:
> Yes, it worked:
> ---------------
> int var = cast(int) floor(sqrt( cast(float) n ));
>
>
> I thought floor already returned an 'int' but I was mistaken.
>
> Thank you very much.

I think you don't need floor.

int var = cast(int)(sqrt(cast(float)n));

or:

int var = cast(int)(float(i).sqrt);

or:

int var = float(i).sqrt.to!int;

Andrea