我有一个电话
long long a = sqrt(n/2);
两者a
and n
are long long
's 但它不会让我编译,因为它说我的使用sqrt()
是一个模棱两可的调用。我根本看不出它在这里怎么可能模棱两可。我该如何解决这个问题?我有同样的问题floor()
。
我的包括
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
和有几个重载,sqrt()
根据重载解析规则,floor()
调用没有“最佳匹配” 。sqrt(long long)
只需将参数转换为适当的类型 - 即,
long long a = sqrt(static_cast<double>(n/2));
//use
sqrt(static_cast<double>(n/2));
//instead of
sqrt(n/2);
sqrt
函数需要 a 、float
adouble
或 a long double
:
long long a = sqrt(n * 0.5);
将 a 转换为 a可能会丢失一些精度,但值会非常接近。long long
double
根据参考
http://www.cplusplus.com/reference/clibrary/cmath/sqrt/
我建议先转换为long double。sqrt的重载不接受整数值
积分参数总是会产生一个“真实”值(float、double、long double)