1、?三角函數?
成都創新互聯公司專注為客戶提供全方位的互聯網綜合服務,包含不限于網站建設、做網站、古浪網絡推廣、微信小程序、古浪網絡營銷、古浪企業策劃、古浪品牌公關、搜索引擎seo、人物專訪、企業宣傳片、企業代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創新互聯公司為所有大學生創業者提供古浪建站搭建服務,24小時服務熱線:13518219792,官方網址:vcdvsql.cn
double sin (double);正弦?
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); 取上整?
用法:向上取整ceil(3.123333)=4 ceilf(3.123333)=4
double floor (double); 取下整?
用法: ?向下取整 floor(3.123333)=3
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*); 將參數的整數部分通過指針回傳, 返回小數部分?
用法:兩數整除之后的余數fmod(9, 8)=1.00
double fmod (double, double); 返回兩參數相除的余數?
用法:double x, fractpart, intpart;
? ? x = 8.123456;
? ? fractpart = modf(x, intpart);
整數部分 = 8.000000
小數部分 = 0.123456
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);數學錯誤計算處理程序
原作者鏈接:
1.定義函數時,希望傳入的參數不為nil,或者為nil時會有警告顯示:
如下:
- (instanceype)initWithFoo:(NSString *)foo bar:(NSString *)bar sark:(NSString *)sark
__atttribute__((nonnull(1, 2)));
p.s. index從1開始,不是0,且只對對象生效。
該技巧同樣來自,sunnyxx大神的微信,逗比狗~
2.定義函數時,希望子類override該方法時候,必須調用super,否則編譯器直接報錯。
@interface OldSix:NSObject
- (void)fooWithNothing __attribute__((objc_requires_super));
該技巧同樣來自,sunnyxx大神的微信,逗比狗~
wait~~~~~
/*檢查子類在重寫該方法時有沒有調用自己(父類)的實現
*對于一些可以被繼承的類,需要子類在重某一調用父類的實現以保證正確的行為,通過在頭文件方法的聲明末尾添加`NS_REQUIRES_SUPER`
*可以讓編譯器檢查子類方法有調用父類的實現。具體使用方法如下:
* - (void)viewWillAppear:(BOOL)animated NS_REQUIRES_SUPER;
*/
但是根據我的實際測試,發現sunnyxx大神仙的方法,沒有任何顯示效果,不知道是不是我打開的方式不對還是怎么,
總之,NS_REQUIRES_SUPER的方法親測可用。
3.誤刪系統sdk頭文件的解決辦法
在終端中輸入:
$ cd ~/Library/Developer/Xcode/DerivedData/ModuleCache/
$ rm -rf *
4.ARC下打印retainCount
extern uintptr_t _objc_rootRetainCount(id obj);
id test = [NSString new];
NSLog(@"retain count %lu",_objc_rootRetainCount(test));
5.工程報錯下,仍然可以編譯成功
6.定位方法的調用者
2.高斯函數,向下取整
floor(1.0/4)=0;
floor(4.0/4)=1;
floor(5.0/4)=1;
floor(8.0/4)=2;
floor()方法是向下取整,類似于數學中的高斯函數 [].取得不大于浮點數的最大整數,對于正數來說是舍棄浮點數部分,對于復數來說,舍棄浮點數部分后再減1.
3.ceil函數,向上取整。
如:
ceil(1.0/4)=1;
ceil(4.0/4)=1;
ceil(5.0/4)=2;
ceil(8.0/4)=2;
ceil()方法是向上取整, 括號內是double類型
這兩個函數都是math.h庫里面的,直接使用就行,ios不需要再次倒入頭文件,類似這個數學函數還有很多,如
1、 三角函數
double sin (double); 正弦
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);數學錯誤計算處理程序
下:
●spinlock_t slock : 自旋鎖,用于上鎖/解鎖 SideTable。 ●RefcountMap refcnts :以DisguisedPtrobjc_object為key的hash表,用來存儲OC對象的引用計數(僅在未開啟isa優化 或 在isa優化情況下isa_t的引用計數溢出時才會用到)。 ●weak_table_t weak_table : 存儲對象弱引用指針的hash表。是OC weak功能實現的核心數據結構。
除了三個成員外,蘋果為SideTable還寫了構造和析構函數:
// 構造函數
SideTable() {
memset(weak_table, 0, sizeof(weak_table));
}
通過析構函數可以知道,SideTable是不能被析構的。
最后是一堆鎖的操作,用于多線程訪問SideTable, 同時,也符合我們上面提到的StripedMap中關于value的lock接口定義:
SideTables是一個64個元素長度的hash數組,里面存儲了SideTable。SideTables的hash鍵值就是一個對象obj的address。 因此可以說,一個obj,對應了一個SideTable。但是一個SideTable,會對應多個obj。因為SideTable的數量只有64個,所以會有很多obj共用同一個SideTable。
先來說一下最外層的SideTables。SideTables可以理解為一個全局的hash數組,里面存儲了SideTable類型的數據,其長度為64。
SideTabls可以通過全局的靜態函數獲取:
可以看到,SideTabls 實質類型為模板類型StripedMap
可以知道, StripedMap 是一個以void *為hash key, T為vaule的hash 表。 hash定位的算法如下:
把地址指針右移4位異或地址指針右移9位,為什么這么做,也不用關心。我們只要關心重點是最后的值要取余StripeCount,來防止index越界就好。
iOS開發交流技術群: 563513413 ,不管你是大牛還是小白都歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 大家一起交流學習成長!
StripedMap的所有T類型數據都被封裝到PaddedT中:
之所以再次封裝到PaddedT (有填充的T)中,是為了字節對齊,估計是存取hash值時的效率考慮。
接下來,這些PaddedT被放到數組array中:
然后,蘋果為array數組寫了一些公共的存取數據的方法,主要是調用indexForPointer方法,使得外部傳入的對象地址指針直接hash到對應的array節點:
接下來是一堆鎖的操作,由于SideTabls是一個全局的hash表,因此當然必須要帶鎖訪問。StripedMap提供了一些便捷的鎖操作方法:
可以看到,所有的StripedMap鎖操作,最終是調用的array[i].value的相關操作。因此,對于模板的抽象數據T類型,必須具備相關的lock操作接口。
因此,要用StripedMap作為模板hash表,對于T類型還是有所要求的。而在SideTables中,T即為SideTable類型,我們稍后會看到SideTable是如何符合StripedMap的數據類型要求的。
本文名稱:ios開發取余,為什么要學IOS開發
鏈接地址:http://vcdvsql.cn/article36/dsdissg.html
成都網站建設公司_創新互聯,為您提供建站公司、網站排名、網站設計公司、微信公眾號、網站營銷、網站導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯