我不太確定double
是否具有標準化表示或者不是這就是爲什麼我想問一下,有沒有一種好方法可以編寫一個assert
,以確保一個值double
是否足夠小以適合int64_t
?斷言double可以放入int
更具體地說,int64_t
和double
之間的比較可能超出了前者的定義範圍,並且保證是正確的?
我不太確定double
是否具有標準化表示或者不是這就是爲什麼我想問一下,有沒有一種好方法可以編寫一個assert
,以確保一個值double
是否足夠小以適合int64_t
?斷言double可以放入int
更具體地說,int64_t
和double
之間的比較可能超出了前者的定義範圍,並且保證是正確的?
您可以通過檢查的極限值嘗試。
#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';
}
[相關布斯博士文章](http://www.drdobbs.com/cpp/comparing-an-integer-with-a-floating-poi/240150323) – jaggedSpire