[英]How can I check whether a double has a fractional part?
基本上我有兩個變量:
double halfWidth = Width / 2;
double halfHeight = Height / 2;
當它們被 2 除時,它們要么是整數,要么是小數。 如何檢查它們是整數還是 0.5?
您可以使用modf
,這應該足夠了:
double intpart;
if( modf( halfWidth, &intpart) == 0 )
{
// your code here
}
首先,您需要確保您使用的是雙精度浮點數學:
double halfWidth = Width / 2.0;
double halfHeight = Height / 2.0;
因為其中一個操作數是雙精度數(即2.0
),這將強制編譯器在進行數學運算之前將Width
和Height
轉換為雙精度數(假設它們還不是double
精度數)。 轉換后,除法將以雙精度浮點數完成。 所以它會在適當的時候有一個小數。
下一步是簡單地使用modf
進行檢查。
double temp;
if(modf(halfWidth, &temp) != 0)
{
//Has fractional part.
}
else
{
//No fractional part.
}
您可以丟棄小數部分並使用 floor() 將結果與原始值進行比較:
if (floor(halfWidth) == halfWidth) {
// halfWidth is a whole number
} else {
// halfWidth has a non-zero fractional part
}
正如@Dávid Laczkó 正確指出的那樣,它是比 modf() 更好的解決方案,因為不需要額外的變量。
根據我的基准測試(Linux、gcc 8.3.0、優化 -O0...-O3),在現代筆記本和服務器處理器上, floor() 調用比 modf() 消耗更少的 CPU 時間。 啟用編譯器優化后,差異甚至會增加。 可能是因為當 floor() 只有一個參數時 modf() 有兩個參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.