重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
《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;
}