I have a call to
long long a = sqrt(n/2);
Both a and n are long long's but it won't let me compile because it says my use of sqrt() is an ambiguous call. I don't see how it's possibly ambiguous here at all. How do I resolve this? I have the same problem with floor().
My includes
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
There are several overloads of sqrt() and floor(), there's no "best match" for a call to sqrt(long long) according to the overload resolution rules. Just cast the argument to the appropriate type -- i.e.,
long long a = sqrt(static_cast<double>(n/2));
//use
sqrt(static_cast<double>(n/2));
//instead of
sqrt(n/2);
The sqrt functions expects a float, a double or a long double:
long long a = sqrt(n * 0.5);
You may lose some precision converting a long long to a double, but the value will be very close.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With