?
本文檔使用 PHP中文網(wǎng)手冊 發(fā)布
在頭文件<math.h>中定義 | ||
---|---|---|
float sqrtf(float arg); | (1) | (自C99以來) |
double sqrt(double arg); | (2) | |
long double sqrtl(long double arg); | (3) | (自C99以來) |
在頭文件<tgmath.h>中定義 | ||
#define sqrt(arg) | (4) | (自C99以來) |
1-3)計算平方根arg
。
4)類型 - 通用宏:如果arg
有類型long double
,sqrtl
被調(diào)用。否則,如果arg
有整數(shù)類型或類型double
,sqrt
則調(diào)用。否則,sqrtf
被調(diào)用。如果arg
是復(fù)雜的或虛,則宏調(diào)用相應(yīng)的復(fù)變函數(shù)(csqrtf
,csqrt
,csqrtl
)。
arg | - | 浮點(diǎn)值 |
---|
如果沒有錯誤發(fā)生arg
,則返回(√arg)的平方根。
如果發(fā)生域錯誤,則返回實現(xiàn)定義的值(NaN,如果支持)。
如果由于下溢而發(fā)生范圍錯誤,則返回正確的結(jié)果(舍入后)。
按照math_errhandling中的指定報告錯誤。
如果arg
小于零,則會發(fā)生域錯誤。
如果實現(xiàn)支持IEEE浮點(diǎn)運(yùn)算(IEC 60559),
如果參數(shù)小于-0,FE_INVALID
則提高并返回NaN。
如果參數(shù)為+∞或±0,則返回,未修改。
如果參數(shù)是NaN,則返回NaN
sqrt
是IEEE標(biāo)準(zhǔn)所要求的。唯一需要確定的其他操作是算術(shù)運(yùn)算符和函數(shù)fma
。在舍入到返回類型(使用默認(rèn)舍入模式)后,結(jié)果sqrt
與無限精確的結(jié)果無法區(qū)分。換句話說,誤差小于0.5 ulp。其他功能,包括pow
,并不那么受到限制。
#include <stdio.h>#include <math.h>#include <errno.h>#include <fenv.h> #pragma STDC FENV_ACCESS ON int main(void){ // normal use printf("sqrt(100) = %f\n", sqrt(100)); printf("sqrt(2) = %f\n", sqrt(2)); printf("golden ratio = %f\n", (1+sqrt(5))/2); // special values printf("sqrt(-0) = %f\n", sqrt(-0.0)); // error handling errno = 0; feclearexcept(FE_ALL_EXCEPT); printf("sqrt(-1.0) = %f\n", sqrt(-1)); if(errno == EDOM) perror(" errno == EDOM"); if(fetestexcept(FE_INVALID)) puts(" FE_INVALID was raised");}
可能的輸出:
sqrt(100) = 10.000000sqrt(2) = 1.414214golden ratio = 1.618034sqrt(-0) = -0.000000sqrt(-1.0) = -nan errno = EDOM: Numerical argument out of domain FE_INVALID was raised
C11標(biāo)準(zhǔn)(ISO/IEC 9899:2011):
7.12.7.5 sqrt函數(shù)(p:249)
7.25類型通用數(shù)學(xué)<tgmath.h>(p:373-375)
F.10.4.5 sqrt函數(shù)(p:525)
C99標(biāo)準(zhǔn)(ISO/IEC 9899:1999):
7.12.7.5 sqrt函數(shù)(p:229-230)
7.22類型通用數(shù)學(xué)<tgmath.h>(p:335-337)
F.9.4.5 sqrt函數(shù)(p:462)
C89/C90標(biāo)準(zhǔn)(ISO/IEC 9899:1990):
4.5.5.2 sqrt函數(shù)
powpowfpowl(C99)(C99) | 計算一個給定的功率(xy)(函數(shù)) |
---|---|
cbrtcbrtfcbrtl(C99)(C99)(C99) | 計算立方根(3√x)(函數(shù)) |
hypothypotfypotl(C99)(C99)(C99) | 計算兩個給定數(shù)的平方和的平方根(√x2+ y2)(函數(shù)) |
csqrtcsqrtfcsqrtl(C99)(C99)(C99) | 計算復(fù)平方根(函數(shù)) |
| C ++文檔sqrt |