1. 程式人生 > >ios 中的基本算數函式

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.0float 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)