www.digitalmars.com         C & C++   DMDScript  

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

reply Narxa <fbf99eQrXpHcjP8L gmail.com> writes:
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
parent reply Adam D. Ruppe <destructionator gmail.com> writes:
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
parent reply Narxa <fbf99eQrXpHcjP8L gmail.com> writes:
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
parent reply Steven Schveighoffer <schveiguy gmail.com> writes:
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
parent reply Narxa <fbf99eQrXpHcjP8L gmail.com> writes:
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
parent Andrea Fontana <nospam example.org> writes:
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