2012-09-01 69 views
0

我知道這應該避免,但不幸的是我必須在混合計算中使用整數和浮點數(雙精度)。標題已經說明了這個問題: 只要沒有溢出,下面的代碼是否可以保證與所有C++浮點實現一起工作(無聲明),無論數值如何?是int(doubleValue)保證小於或等於doubleValue爲正值

編輯:忘記提到該值始終爲正

double realSplit = seg.squareLength()/sqr(maxLength); 
int split = realSplit; 
assert(realSplit-split >= 0.0); 
+0

@netcoder:有一個隱含的「演員」,你也可以寫int split = int(realSplit),這將是相同的,但實際上並不是一個真正的演員,只要我得到的詞的意思鑄右 – Martin

+0

這是隱含的,但是會丟失數據,因此編譯器可能會警告您。使用演員陣容使其消失。 :) – netcoder

+0

有趣的是,它不,雖然我對警告非常嚴格。我使用gcc(4.4.3)和-Wall -Wextra以及更多與這種情況無關的內容。哪個gcc選項應該對此提出警告? – Martin

回答

7

一個浮點值轉換成整數值丟棄的小數部分。對於大於或等於0的值,您的斷言成立。對於小於0的值,它以另一種方式進行。

+0

沒錯。標準引用是C++ 11,4.9:「轉換截斷;即小數部分被丟棄,如果截斷值不能在目標類型中表示,則行爲未定義。」 –

相關問題