6

に電話があります

long long a = sqrt(n/2);

aとは両方ともn' sですが、使用があいまいな呼び出しlong longであると表示されているため、コンパイルできません。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

関数は、 aまたは aをsqrt期待します:floatdoublelong 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 doubleに変換することをお勧めします。sqrtのオーバーロードは整数値を受け入れません

整数パラメーターは常に「実数」の値になる可能性があります (float、double、long double)

于 2012-06-10T16:31:25.293 に答える