重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
《C标准库圣经》上面说,C语言开发数值算法的难度大于其他所有库函数之和。
站在用户的角度思考问题,与客户深入沟通,找到喀喇沁网站设计与喀喇沁网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、成都做网站、企业官网、英文网站、手机端网站、网站推广、申请域名、虚拟主机、企业邮箱。业务覆盖喀喇沁地区。
这些函数分别是做不同用处的,有些相互有点关系,有些则完全没有关系,所以没法比较所谓的优缺点。具体每个函数的用法,可以manxxx或者在网上搜,我就不复制黏贴了,这里给一个简单的说明:times:用来统计进程及其子进程执行所消耗的CPU时间。常见用法是在不同地方调用两次这个函数,从而可以计算出进程或子进程在这两次调用之间消耗了多少CPU时间。time:返回当前相对于Epoch(在linux/unix里,这个时间一般指1970年1月1日0点0分0秒)所经过的秒数。常见用法是在不同地方调用两次这个函数,从而可以计算这两处调用之间系统时间过了多少秒。gettimeofday:有点类似于time,获取当前相对于Epoch所经过的秒数+微秒数。clock:返回当前进程消耗的CPU时间,用法类似于times,这个函数返回值是否包含等待子进程的时间在不同的实现中是不一样的,在linux里,不包含。由上可见,times和clock可以算成一类,用来计算CPU时间time和gettimeofday可以算成一类,都是用来计算真实时间的
float用printf("%f"来表示,double用printf("%ld"来表示。
把英文帮助找出来了,自己看看吧。
函数原型:
#include math.h
double erfc(double x);
float erfcf(float x);
long double erfcl(long double x);
Link with -lm. 编译时需要链接 -lm
DESCRIPTION 说明
The erfc() function returns the complementary error function of x, that is, 1.0 - erf(x).
RETURN VALUE 返回值
On success, these functions return the complementary error function of x, a value in the range [0,2].
If x is a NaN, a NaN is returned.
If x is +0 or -0, 1 is returned.
If x is positive infinity, +0 is returned.
If x is negative infinity, +2 is returned.
If the function result underflows and produces an unrepresentable value, the return value is 0.0.
If the function result underflows but produces a representable (i.e., subnormal) value, that value is returned, and a range error occurs.
c语言标准库函数里没有error函数。C语言对异常的处理确实不够好,大多的时候都需要人工除错。
有几个类似的函数,分别处理各种情况下的异常:
ferror函数:在调用各种输入输出函数(如 putc.getc.fread.fwrite等)时,如果出现错误,除了函数返回值有所反映外,还可以用ferror函数检查。 它的一般调用形式为 ferror(fp);如果ferror返回值为0(假),表示未出错。如果返回一个非零值,表示出错。应该注意,对同一个文件 每一次调用输入输出函数,均产生一个新的ferror函 数值,因此,应当在调用一个输入输出函数后立即检 查ferror函数的值,否则信息会丢失。在执行fopen函数时,ferror函数的初始值自动置为0。在库函数中有个errno变量,每个errno值对应着以字符串表示的错误类型。当你调用"某些"函数出错时,该函数已经重新设置了errno的值。perror函数只是将你输入的一些信息和现在的errno所对应的错误一起输出。
perror函数: 用来将上一个函数发生错误的原因输出到标准设备(stderr)。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量errno 的值来决定要输出的字符串。
strerror函数:用来 从错误号码 查 用英文表达的错误内容,返回指针,指向这段英文字符串。如果你不知道错误号,那么在出错发生时,及时用 errno 的当前值 作参数,打印这段字符串。
一般是:根据问题领域所容许的的精度,定义一个误差上限(一个极小数)。然后在浮点计算时,计算结果与这个误差上限作比较,而不是与0作比较。
例如,牛顿迭代法求值:
double f(double x); // f(x)
double f1(double x); // f(x)的导函数
#define EPSILON 0.001 // 误差精度
double resolve(double x) { // x为初始近似解
while (1) {
double delta = f(x) / f1(x);
// 当迭代的变化量,小于误差精度时,就认为找到解了
if (delta - EPSILON delta EPSILON) {
break;
}
x -= delta;
}
return x;
}
#include math.h
#define ERF_PI 3.141592653589793
#define ERF_N 100
double erf(double x)////erf(x) = the cumulation of { 2/sqrt(pi)*exp(-z*z) } from 0 to x; //error function
{ // 2/sqrt(pi) * { ∑[(-1)^n / n! * x^(2n+1)/(2n+1)] + x }
double res = x;
double factorial = 1; //n!
double x_pow = x;
int one = 1, n;
for( n=1; n100; n++ ){
factorial *= n;
one *= -1;
x_pow *= x*x;
res += one / factorial * x_pow / ( 2*n+1 );
}
res *= 2 / sqrt(ERF_PI);
return res;
}
double norm_cdf(double x)//cumulation distribution function of standard normal distribution
{
return ( 1 + erf( x / sqrt(2) ) ) / 2;
}