C++调用平方根函数问题
已知求平方根的迭代公式为: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;
}
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;
}
但是C++中,类型不匹配时,它首先看的是有没有重载函数.
而不巧,sqrt函数就有很多个第一个参数是int的多参数重载函数(这点是从报错信息上看出来的.)
m*1.0的结果是一个浮点数,有和它匹配的函数,所以正常运行.
解决方案就是"兔子和小强"写的,他写的那三种都行.
比如 sqrt( (double)m );
LZ的C++基本功不够啊=,=
这和重载函数有什么关系?
cmath.h非标准的,不知这个cmath.h 有没有定义多个sqrt()重载函数
m + 0.0
m * 1.0