簡單的問題。在我的代碼中,我將double設置爲一個整數,如下所示:將double設置爲int而不投射是否安全?
int square_root = sqrt(sum);
是否需要顯式強制轉換?
沒有鑄造,我似乎得到我想要的結果,即floor(sqrt(x))
sqrt(4200) = 64
sqrt(42) = 6
簡單的問題。在我的代碼中,我將double設置爲一個整數,如下所示:將double設置爲int而不投射是否安全?
int square_root = sqrt(sum);
是否需要顯式強制轉換?
沒有鑄造,我似乎得到我想要的結果,即floor(sqrt(x))
sqrt(4200) = 64
sqrt(42) = 6
int square_root = sqrt(sum);
在C相當於:
int square_root = (int) sqrt(sum);
現在知道,如果的組成部分double
不能在int
中表示,行爲未定義(在這兩種情況下)。
Ehm,double的整數部分如何不能表示爲int。是否因爲數值範圍太大? –
@TheUnfunCat例如'int a =(double)INT_MAX + 1.0;'是未定義的行爲。 – ouah
+1爲未定義的行爲 – iabdalkader
在功能上沒有區別,但明確的演員表會引起讀者的注意,即截斷正在進行。
所以鑄造是截斷,這是地板? –
@TheUnfunCat。截斷我的意思是地板,是的。在這兩種情況下,你都有這種情況,只是在明確的情況下,你可以最大限度地降低讀者可能意外地認爲不存在截斷的風險 –
如果您的數字的平方根是整數,它不會影響。但如果它是一個實數(例如10的平方根),則會得到一個截斷的整數,這可能會給您的程序帶來不便。
如果這不是性能問題的關鍵代碼,那麼既然你想發言,爲什麼不直接調用'floor'並將其轉換爲整數,以明確你正在做什麼?如果這是性能嚴重的代碼,那麼我明白你爲什麼不想這麼做。 –
不,用自己的項目euler教自己c,找不到這個簡單q的答案,所以決定在這裏問這裏:)也就是說。不關鍵 –