## digitalmars.D.learn - D do not know which function to use apparently

• Narxa (15/15) Dec 11 2018 Hello, people!
```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!
```
Dec 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.
```
Dec 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.
```
Dec 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
```
Dec 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.
```
Dec 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
```
Dec 11 2018