ios 中的基本算數函式
介紹一下Objective-c常用的函式,常數變數
1、 三角函式
double sin (double);正弦 sinA=∠A的對邊/斜邊。是股與弦的比例。double cos (double);餘弦
double tan (double);正切
2 、反三角函式
double asin (double); 結果介於[-PI/2, PI/2]
double acos (double); 結果介於[0, PI]
double atan (double); 反正切(主值), 結果介於[-PI/2, PI/2]
double atan2 (double, double); 反正切(整圓值), 結果介於[-PI, PI]
3 、雙曲三角函式
double sinh (double);
double cosh (double);
double tanh (double);
4 、指數與對數
double exp (double);求取自然數e的冪
double sqrt (double);開平方
double log (double); 以e為底的對數
double log10 (double);以10為底的對數
double pow(double x, double y);計算以x為底數的y次冪
float powf(float x, float y); 功能與pow一致,只是
5 、取整
double ceil (double); 取上整
double floor (double); 取下整
6 、絕對值
double fabs (double);求絕對值
double cabs(struct complex znum) ;求複數的絕對值
7 、標準化浮點數
double frexp (double f, int *p); 標準化浮點數, f = x * 2^p, 已知f求x, p ( x介於[0.5, 1] )
double ldexp (double x, int p); 與frexp相反, 已知x, p求f
8 、
double modf (double, double*); 將引數的整數部分通過指標回傳, 返回小數部分
double fmod (double, double); 返回兩引數相除的餘數
9 、其他
double hypot(double x, double y);已知直角三角形兩個直角邊長度,求斜邊長度
double ldexp(double x, int exponent);計算x*(2的exponent次冪)
double poly(double x, int degree, double coeffs [] );計算多項式
nt matherr(struct exception *e);數學錯誤計算處理程式
iOS_數學函式Math Functions
floor/ceil/round 向下取整/向上取整/四捨五入
取整例項1:
double d1 =10.12, d2 =10.88;
float f1 =10.19893, f2 =10.77;
DLog(@"floor_d = %f, floor_f = %f, ceil_d = %f, ceil_f = %f, round_d = %f, round_f = %f", floor(d1), floorf(f1), ceil(d1), ceilf(f1), round(d1), roundf(f1));
//輸出 floor_d = 10.000000, floor_f = 10.000000, ceil_d = 11.000000, ceil_f = 11.000000, round_d = 10.000000, round_f = 10.000000
DLog(@"floor_d2 = %f, floor_f2 = %f, ceil_d2 = %f, ceil_f2 = %f, round_d2 = %f, round_f2 = %f", floor(d2), floorf(f2), ceil(d2), ceilf(f2), round(d2), roundf(f2));
//輸出 floor_d2 = 10.000000, floor_f2 = 10.000000, ceil_d2 = 11.000000, ceil_f2 = 11.000000, round_d2 = 11.000000, round_f2 = 11.000000
//取整與取餘
float f1 =0.0;
DLog(@"8.99的小數部分:modff(2.0, &f1) = %.2f, 整數部分:f1 = %.2f",modff(8.99, &f1), f1);
//輸出 8.99的小數部分:modff(2.0, &f1) = 0.99, 整數部分:f1 = 8.00
DLog(@"fmodf(9.0, 2.0) = %f, fmodf(10.0, 2.0) = %f", fmodf(9.0,2.0), fmodf(10.0,2.0)); 取餘
//輸出 fmodf(9.0, 2.0) = 1.000000, fmodf(10.0, 2.0) = 0.000000
三角函式:
float f1 =10.19893;
DLog(@"acosf = %f, asinf = %f, atanf = %f", acosf(f1), asinf(f1), atanf(f1));
//輸出 acosf = nan, asinf = nan, atanf = 1.473059
DLog(@"cosf = %f, sinf = %f, tanf = %f", cosf(f1), sinf(f1), tanf(f1));
//輸出 cosf = -0.715014, sinf = -0.699110, tanf = 0.977757
DLog(@"acoshf = %f, asinhf = %f, atanhf = %f", acoshf(f1), asinhf(f1), atanhf(f1));
//輸出 acoshf = 3.013018, asinhf = 3.017825, atanhf = nan
對數與指數
float f1 =100.0, f2 =4.0;
DLog(@"對數: logf(100) = %f, log10f(100) = %f, log2f(4) = %f", logf(f1), log10f(f1), log2f(f2));
//輸出對數: logf(100) = 4.605170, log10f(100) = 2.000000, log2f(4) = 2.000000
DLog(@"指數: pow(2, 3) = %f", pow(2, 3));
//輸出指數: pow(2, 3) = 8.000000
DLog(@"開平方:sqrt(100) = %f", sqrt(f1));
//輸出開平方:sqrt(100) = 10.000000
float x =16.4, y;
int n;
y = frexpf(x, &n);
DLog(@"y = frexpf(%f, &n) = %f, n = %d", x, y, n);
//輸出 y = frexpf(16.400000, &n) = 0.512500, n = 5
//即 16.4 = 0.5125 * 2^5
DLog(@"5 * 2^3 = ldexpf(5, 3) = %f",ldexpf(5,3));
// 5 * 2^3 = ldexpf(5, 3) = 40.000000
/******************************************************************************
* *
* Math Functions *
* *
******************************************************************************/
————————————————————————————————
反三角函式
externfloat acosf(float);
externdouble acos(double);
externlongdouble acosl(longdouble); 結果介於[0,PI]
externfloat asinf(float); 結果介於[-PI/2, PI/2]
externfloat atanf(float); 反正切(主值),結果介於[-PI/2, PI/2]
externfloat atan2f(float,float); 反正切(整圓值),結果介於[-PI, PI]
三角函式
externfloat cosf(float);餘弦
externfloat sinf(float);正弦
externfloat tanf(float);正切
雙曲三角函式
externfloat acoshf(float);雙曲反餘弦(Hyperbolic arc cosine)函式
externfloat asinhf(float);雙曲反正弦(Hyperbolic arc sine)函式
externfloat atanhf(float);雙曲反正切(Hyperbolic arc tangent)函式
externfloat coshf(float); 雙曲餘弦(Hyperbolic cosine)函式
externfloat sinhf(float); 雙曲正弦(Hyperbolic sine)函式
externfloat tanhf(float); 雙曲正切(Hyperbolic tangent)函式
————————————————————————————————
指數與對數
externfloat expf(float); 求取自然數e的冪
externfloat exp2f(float); 計算以2為底的指數
externfloat expm1f(float);以2為底的指數結果再減1
externfloat logf(float);以e為底的對數
externfloat log10f(float);以10為底的對數
externfloat log2f(float);以2為底的對數
externfloat log1pf(float); 計算1與給定值x 的和(1+x)的自然對數(ln(1+x))
externfloat logbf(float);返回以為底,|x| 的對數值,返回值為浮點數
externfloat modff(float,float *); 取整與取餘 , 例,float f1 =0.0; float f2 = modff(8.99, &f1); 結果:f1 = 8 f2 = 0.99
externfloat ldexpf(float,int); 計算 引數1乘以2的 引數2次冪 // 5 * 2^3 = ldexpf(5, 3) = 40.000000
externfloat frexpf(float,int *);把一個浮點數分解為尾數和2為底的指數, 例 16.4 = 0.5125*2^5
externint ilogbf(float);返回以為底,|x|的對數值,返回值為整數
externfloat scalbnf(float,int);y
externfloat scalblnf(float,longint); 引數1乘以FLT_RADIX的整數冪y
externfloat fabsf(float); 絕對值
externfloat cbrtf(float);計算引數的立方根 3√x
externfloat hypotf(float,float); 計算兩個數平方的和的平方根(√x2+y2)(求直角三角形的斜邊長度)
externfloat powf(float,float);計算以m為底數的n次冪, powf(m, n)
externfloat sqrtf(float); 開平方
externfloat erff(float);返回x的高斯誤差函式
externfloat erfcf(float); 返回x的補餘高斯誤差函式
/*lgammaf, lgamma, and lgammal are not thread-safe. The thread-safe
variants lgammaf_r, lgamma_r, and lgammal_r are made available if
you define the _REENTRANT symbol before including <math.h> */
externfloat lgammaf(float);γ函式的自然對數
externfloat tgammaf(float);γ函式(伽瑪函式)
————————————————————————————————
浮點數的最近整數操作
externfloat ceilf(float); 向上取整
externfloat floorf(float); 向下取整
externfloat nearbyintf(float);通過使用當前舍入方向,舍入引數為浮點格式的一個整數值,整數。返回舍入的整數值。
externfloat rintf(float);四捨五入
externlongint lrintf(float);四捨五入
externfloat roundf(float);四捨五入
externlongint lroundf(float);四捨五入
/* long long is not part of C90. Make sure you are passing -std=c99 or
-std=gnu99 or higher if you need these functions returning long longs */
#if !(__DARWIN_NO_LONG_LONG)
externlonglongint llrintf(float);
externlonglongint llroundf(float);
#endif /* !(__DARWIN_NO_LONG_LONG) */
externfloat truncf(float);幅度(到0的距離,即絕對值)不大於給定值的最近整數
externfloat fmodf(float,float); 獲得浮點數除法操作的餘數
externfloat remainderf(float,float);獲得浮點數除法操作的帶符號餘數
externfloat remquof(float,float,int *); 獲得浮點數除法操作的帶符號餘數,且返回符號及操作結果的最後三位組成的整數
externfloat copysignf(float,float);用引數1的大小和引數2的符號來返回值 //輸出 copysignf(2.5, -1.0) = -2.500000, copysignf(4.0, 3) = 4.000000
externfloat nanf(constchar *); 將執行時定義的字串作為靜態化非數型(Quiet NaN)操作所需的值
externfloat nextafterf(float,float);返回x之後y方向上的下一個可描述(Representable)值
externdouble nexttoward(double,longdouble);返回x 之後y 方向上的下一個可描述值
externfloat fdimf(float,float);計算兩引數之間正整數差異//輸出 fdimf(2.5, 3.7) = 0.000000, fdimf(5.4, 2.2) = 3.200000
externfloat fmaxf(float,float); 求最大值
externfloat fminf(float,float); 求最小值
externfloat fmaf(float,float,float);乘累加(Multiply-add)
#define isgreater(x, y) __builtin_isgreater((x),(y))
#define isgreaterequal(x, y) __builtin_isgreaterequal((x),(y))
#define isless(x, y) __builtin_isless((x),(y))
#define islessequal(x, y) __builtin_islessequal((x),(y))
#define islessgreater(x, y) __builtin_islessgreater((x),(y))
#define isunordered(x, y) __builtin_isunordered((x),(y))
/* Legacy BSD API: please use C99 INFINITY macro instead. */
externfloat __inff(void)__OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0, __MAC_10_9, __IPHONE_NA, __IPHONE_NA);
externdouble __inf(void)__OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0, __MAC_10_9, __IPHONE_NA, __IPHONE_NA);
externlongdouble __infl(void)__OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0, __MAC_10_9, __IPHONE_NA, __IPHONE_NA);
/* Implementation detail; please use the standard C NAN macro instead. */
externfloat __nan(void)__OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_NA);
算術函式
函式名 | 說明 |
---|---|
int rand() |
隨機數生成。 (例) srand(time(nil)); //隨機數初期化 int val = rand()P; //0~49之間的隨機數 |
int abs(int a) |
整數的絕對值 (例)int val = abs(-8); →8 ※浮點數的時候用fabs。 |
double fabs(double a) |
浮點數的絕對值 (例)double val = fabs(-12.345); →12.345 ※整數的時候用abs。 |
double floor(double a) |
返回浮點數整數部分(捨棄小數點) (例)double val = floor(12.345); →12.000 |
double ceil(double a); |
返回浮點數整數部分(捨棄小數點部分,往個位數進1) (例)double val = ceil(12.345); →13.000 |
double pow(double a, double b) |
a的b次方 (例)double val = pow(2, 3); →8 |
double sqrt(double a) |
a的平方根 (例)double val = sqrt(2); →1.41421356 |
三角函式
函式名 | 說明 |
---|---|
double cos(double a) | 餘弦函式 (a:弧度) |
double sin(double a) | 正弦函式 (a:弧度) |
double tan(double a) | 正切函式 (a:弧度) |
double asin(double a) | 反正弦值 (a:弧度) |
double acos(double a) | 反餘弦函式(a:弧度) |
double atan(double a) | 反正切函式 |
double atan2(double a, double b) | 返回給定的 a 及 b 座標值的反正切值 |
指數函式
函式名 | 說明 |
---|---|
double log(double a) | 以e 為底的對數值 |
double log10(double a) | 對數函式log |
常數
常數名 | 說明 |
---|---|
M_PI | 圓周率(=π) |
M_PI_2 | 圓周率的1/2(=π/2) |
M_PI_4 | 圓周率的1/4(=π/4) |
M_1_PI | =1/π |
M_2_PI | =2/π |
M_E | =e |
M_LOG2E | log_2(e) |
M_LOG10E |
log_10(e) |