從書中學到的一些程式設計小技巧

2022-09-20 03:57:09 字數 1574 閱讀 5086

有什麼好的方法來驗對浮點數在

「足夠接近

」 情況下的等值? 

浮點數的定義決定它的絕對精確度會隨著其代表的值變化

, 所以比較兩個浮 點數的最好方法就要利用乙個精確的閾值。這個閾值和作比較的浮點數值大小有 關。不要用下面的**:

double a, b;

...if (a == b) /*

錯!*/

要用類似下列的方法:

#include if (fabs(a - b)  <= epsilon * fabs(a))

epsilon

被賦為乙個選定的值來控制

「接近度

」。你也要確定

a 不會為 0。

怎樣獲得在一定範圍內的隨機數? 

直接的方法是

rand() % n /*

不好 */

試圖返回從

0 到

n −

1 的數字。但這個方法不好

, 因為許多隨機數發生器的

低位位元並不隨機

, 參見問題

13.16

。乙個較好的方法是

:

(int)((double)rand() / ((double)rand_max + 1) * n)

如果你不希望使用浮點

, 另乙個方法是

: rand() / (rand_max / n + 1)

兩種方法都需要知道

rand max,

而且假設

n 要遠遠小於

rand max

。 rand max

在ansi

裡#define

在<

stdlib.h

>

。 順便提一下

, rand max

是個常數

,它告訴你

c庫函式

rand()

的固定範圍。 你不可以設

rand max

為其它的值

, 也沒有辦法要求

rand()

返回其它範圍的 值。

如果你用的隨機數發生器返回的是

0 到

1 的浮點值

, 要取得範圍在

0 到

n −

1 內的整數

, 只要將隨機數乘以

n 就可以了。 

由乙個日期

, 怎樣知道是星期幾? 

int dayofweek(int y, int m, int d)  /* 0 = sunday */

;y -= m < 3;

return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;

}

這段**好牛逼啊

(year%4 == 0)

是否足夠判斷潤年?

2000

年是閏年嗎? 

year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)

一些Python程式設計小技巧

from xgboost.sklearn import xgbclassifier from sklearn.ensemble import randomforestclassifier from sklearn.ensemble import gradientboostingclassifier ...

一些程式設計上的小技巧

下面介紹的方法 程式設計珠璣 裡也有所提及 下面的例子是用python寫的,但這些概念適用於任何程式語言。找出程式的主執行路徑 你的程式大部分時間都執行這些模組。首先優化這部分 但也不要在程式實現的第一次迭代中進行優化。那些處理邊界情況或失敗 異常處理的地方,這部分 不需要優化,除非它們引起了值得注...

一些程式設計上的小技巧

下面介紹的方法 程式設計珠璣 裡也有所提及 下面的例子是用python寫的,但這些概念適用於任何程式語言。找出程式的主執行路徑 你的程式大部分時間都執行這些模組。首先優化這部分 但也不要在程式實現的第一次迭代中進行優化。那些處理邊界情況或失敗 異常處理的地方,這部分 不需要優化,除非它們引起了值得注...