我打电话给
long long a = sqrt(n/2);
a
和n
都是long long
,但它不会让我编译,因为它说我使用sqrt()
是一个含糊不清的电话。我看不出它在这里有多么模棱两可。我该如何解决这个问题?我对floor()
也有同样的问题。
我的包含
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
答案 0 :(得分:8)
sqrt()
和floor()
有几个重载,根据重载解析规则,对sqrt(long long)
的调用没有“最佳匹配”。只需将参数转换为适当的类型 - 即。,
long long a = sqrt(static_cast<double>(n/2));
答案 1 :(得分:6)
//use
sqrt(static_cast<double>(n/2));
//instead of
sqrt(n/2);
答案 2 :(得分:3)
sqrt
函数需要float
,double
或long double
:
long long a = sqrt(n * 0.5);
您可能会失去一些将<{1}}转换为long long
的精确度,但该值非常接近。
答案 3 :(得分:1)
根据参考资料
http://www.cplusplus.com/reference/clibrary/cmath/sqrt/
我建议先转换为 long double 。 sqrt 的重载不接受整数值
积分参数总是可以产生“实际”值(浮点数,双倍,长双倍)