6

我有一个电话

long long a = sqrt(n/2);

两者aand nare long long's 但它不会让我编译,因为它说我的使用sqrt()是一个模棱两可的调用。我根本看不出它在这里怎么可能模棱两可。我该如何解决这个问题?我有同样的问题floor()

我的包括

#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
4

4 回答 4

8

和有几个重载,sqrt()根据重载解析规则,floor()调用没有“最佳匹配” 。sqrt(long long)只需将参数转换为适当的类型 - 即,

long long a = sqrt(static_cast<double>(n/2));
于 2012-06-10T16:14:18.297 回答
6
//use 
sqrt(static_cast<double>(n/2));
//instead of 
sqrt(n/2);
于 2012-06-10T16:15:13.073 回答
3

sqrt函数需要 a 、floatadouble或 a long double

long long a = sqrt(n * 0.5);

将 a 转换为 a可能会丢失一些精度,但值会非常接近。long longdouble

于 2012-06-10T16:15:59.460 回答
1

根据参考

http://www.cplusplus.com/reference/clibrary/cmath/sqrt/

我建议先转换为long doublesqrt的重载不接受整数值

积分参数总是会产生一个“真实”值(float、double、long double)

于 2012-06-10T16:31:25.293 回答