《C標準庫圣經(jīng)》上面說,C語言開發(fā)數(shù)值算法的難度大于其他所有庫函數(shù)之和。

站在用戶的角度思考問題,與客戶深入溝通,找到喀喇沁網(wǎng)站設計與喀喇沁網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設計、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、申請域名、虛擬主機、企業(yè)郵箱。業(yè)務覆蓋喀喇沁地區(qū)。
這些函數(shù)分別是做不同用處的,有些相互有點關系,有些則完全沒有關系,所以沒法比較所謂的優(yōu)缺點。具體每個函數(shù)的用法,可以manxxx或者在網(wǎng)上搜,我就不復制黏貼了,這里給一個簡單的說明:times:用來統(tǒng)計進程及其子進程執(zhí)行所消耗的CPU時間。常見用法是在不同地方調(diào)用兩次這個函數(shù),從而可以計算出進程或子進程在這兩次調(diào)用之間消耗了多少CPU時間。time:返回當前相對于Epoch(在linux/unix里,這個時間一般指1970年1月1日0點0分0秒)所經(jīng)過的秒數(shù)。常見用法是在不同地方調(diào)用兩次這個函數(shù),從而可以計算這兩處調(diào)用之間系統(tǒng)時間過了多少秒。gettimeofday:有點類似于time,獲取當前相對于Epoch所經(jīng)過的秒數(shù)+微秒數(shù)。clock:返回當前進程消耗的CPU時間,用法類似于times,這個函數(shù)返回值是否包含等待子進程的時間在不同的實現(xiàn)中是不一樣的,在linux里,不包含。由上可見,times和clock可以算成一類,用來計算CPU時間time和gettimeofday可以算成一類,都是用來計算真實時間的
float用printf("%f"來表示,double用printf("%ld"來表示。
把英文幫助找出來了,自己看看吧。
函數(shù)原型:
#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語言標準庫函數(shù)里沒有error函數(shù)。C語言對異常的處理確實不夠好,大多的時候都需要人工除錯。
有幾個類似的函數(shù),分別處理各種情況下的異常:
ferror函數(shù):在調(diào)用各種輸入輸出函數(shù)(如 putc.getc.fread.fwrite等)時,如果出現(xiàn)錯誤,除了函數(shù)返回值有所反映外,還可以用ferror函數(shù)檢查。 它的一般調(diào)用形式為 ferror(fp);如果ferror返回值為0(假),表示未出錯。如果返回一個非零值,表示出錯。應該注意,對同一個文件 每一次調(diào)用輸入輸出函數(shù),均產(chǎn)生一個新的ferror函 數(shù)值,因此,應當在調(diào)用一個輸入輸出函數(shù)后立即檢 查ferror函數(shù)的值,否則信息會丟失。在執(zhí)行fopen函數(shù)時,ferror函數(shù)的初始值自動置為0。在庫函數(shù)中有個errno變量,每個errno值對應著以字符串表示的錯誤類型。當你調(diào)用"某些"函數(shù)出錯時,該函數(shù)已經(jīng)重新設置了errno的值。perror函數(shù)只是將你輸入的一些信息和現(xiàn)在的errno所對應的錯誤一起輸出。
perror函數(shù): 用來將上一個函數(shù)發(fā)生錯誤的原因輸出到標準設備(stderr)。參數(shù) s 所指的字符串會先打印出,后面再加上錯誤原因字符串。此錯誤原因依照全局變量errno 的值來決定要輸出的字符串。
strerror函數(shù):用來 從錯誤號碼 查 用英文表達的錯誤內(nèi)容,返回指針,指向這段英文字符串。如果你不知道錯誤號,那么在出錯發(fā)生時,及時用 errno 的當前值 作參數(shù),打印這段字符串。
一般是:根據(jù)問題領域所容許的的精度,定義一個誤差上限(一個極小數(shù))。然后在浮點計算時,計算結(jié)果與這個誤差上限作比較,而不是與0作比較。
例如,牛頓迭代法求值:
double?f(double?x);??//?f(x)
double?f1(double?x);?//?f(x)的導函數(shù)
#define?EPSILON?0.001?//?誤差精度
double?resolve(double?x)?{?//?x為初始近似解
while?(1)?{
double?delta?=?f(x)?/?f1(x);
//?當?shù)淖兓浚∮谡`差精度時,就認為找到解了
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;
}
當前文章:c語言中有誤差函數(shù),c語言中數(shù)的表示誤差
文章位置:http://chinadenli.net/article3/dsejoos.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、服務器托管、網(wǎng)站導航、電子商務、軟件開發(fā)、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)