C++调用平方根函数问题

调用cmath中的sqrt函数,定义了一个intm,然后定义doublesqrtm=sqrt(m),报错“有多个重载函数"sqrt"实例与参数列表匹配”,后来发现钱能的C... 调用cmath中的sqrt函数,定义了一个int m,然后定义double sqrtm=sqrt(m),报错“有多个重载函数"sqrt"实例与参数列表匹配”,后来发现钱能的C++教程上写的是sqrt(m*1.0).请问这是怎么回事? 展开
 我来答
wffyfx
推荐于2019-09-19 · TA获得超过1.3万个赞
知道答主
回答量:42
采纳率:87%
帮助的人:5.5万
展开全部

迭代法求某数a的平方根

已知求平方根的迭代公式为:x n+1 = (xn + a / xn) / 2
要求前后两次求出的差的绝对值小于10-5。

算法如下:

① 设定一个x的初值x0 ; (在如下程序中取x0=a/2, 通过迭代公式求出x1,可以肯定与真正的平方根相比,误差很大。)

② 用上述公式求出x的下一个值 x1 ;

③ 如此继续下去,直到前后两次求出的x值(x n+1和xn)满足以下关系:|x n+1-xn|<10-5 .

扩展资料:

样例:

/* sqrt example */

#include <stdio.h>      /* printf */

#include <math.h>       /* sqrt */ 

int main ()

{

double param, result;

param = 1024.0;

result = sqrt (param);

printf ("sqrt(%f) = %f\n", param, result );

return 0;

}

8826055
推荐于2017-09-13 · TA获得超过7510个赞
知道大有可为答主
回答量:1680
采纳率:81%
帮助的人:901万
展开全部

C++中cmath头文件中的sqrt函数能计算一个数的平方根。其原型在C++ 11中有四个:

double sqrt (double x);
float sqrt (float x);
long double sqrt (long double x);
double sqrt (T x);           // additional overloads for integral types

其中最后一个是为整型类型提供的重载版本,其会先将x转换为double类型再进行计算。这是C++ 11提供的新功能。因此在C++ 11以前像sqrt(1)这类的语句是非法的,因为编译器不知道匹配哪个函数(只有前三个版本),在C++ 11之后这样的语句就合法了,编译器会匹配最后一个版本。

样例:(摘自cplusplus.com)

/* sqrt example */
#include <stdio.h>      /* printf */
#include <math.h>       /* sqrt */

int main ()
{
  double param, result;
  param = 1024.0;
  result = sqrt (param);
  printf ("sqrt(%f) = %f\n", param, result );
  return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
awpfun
2012-08-01 · TA获得超过113个赞
知道小有建树答主
回答量:140
采纳率:0%
帮助的人:180万
展开全部
汗,C语言中,由于没有重载,你直接sqrt(m)它会把m转成浮点型.
但是C++中,类型不匹配时,它首先看的是有没有重载函数.
而不巧,sqrt函数就有很多个第一个参数是int的多参数重载函数(这点是从报错信息上看出来的.)
m*1.0的结果是一个浮点数,有和它匹配的函数,所以正常运行.
解决方案就是"兔子和小强"写的,他写的那三种都行.
比如 sqrt( (double)m );

LZ的C++基本功不够啊=,=
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ycsxm
2012-08-01 · TA获得超过3.3万个赞
知道大有可为答主
回答量:1.4万
采纳率:0%
帮助的人:7953万
展开全部
sqrt()的参数须为浮点,不可为整数,转换 一下就可以了: sqrt((double)m)
追问
这和重载函数有什么关系?
追答
cmath.h非标准的,不知这个cmath.h  有没有定义多个sqrt()重载函数
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
兔子和小强
2012-08-01 · TA获得超过6946个赞
知道大有可为答主
回答量:3332
采纳率:74%
帮助的人:1433万
展开全部
(double)m
m + 0.0
m * 1.0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式