2016-07-14 35 views
0

我不太確定double是否具有標準化表示或者不是這就是爲什麼我想問一下,有沒有一種好方法可以編寫一個assert,以確保一個值double是否足夠小以適合int64_t斷言double可以放入int

更具體地說,int64_tdouble之間的比較可能超出了前者的定義範圍,並且保證是正確的?

+0

[相關布斯博士文章](http://www.drdobbs.com/cpp/comparing-an-integer-with-a-floating-poi/240150323) – jaggedSpire

回答

5

像這樣的工作:

assert(std::numeric_limit<int64_t>::min() <= value 
     && value <= std::numeric_limits<int64_t>:::max() 
+0

是一個'double'之間的比較這可能比定義好的「int64_t」和「int64_t」大? – Curious

+0

@Curious我會另外引入'static_cast'。它實際上都很好定義。 –

+0

但是保證'int64_t'和'double'之間的轉換不會失去任何精度,並且隨後導致錯誤的結果? – Curious

0

您可以通過檢查的極限值嘗試。

#include <iostream> 
#include <climits> 
#include <cassert> 

using namespace std; 

int main() 
{ 
    double val = static_cast<double>(LONG_MAX); // or LONG_MIN 

    assert((static_cast<long int>(val) > LONG_MIN) && (static_cast<long int>(val) < LONG_MAX)); 
    cout << static_cast<long int>(val) << '\n'; 
}