[英]C++ - How to correctly cast double to int
我正在編寫一個需要占據平方根的程序。 由於我采用平方根的值是正數,我只是將其轉換為int。 所以說以下示例:
int i = 16;
int j = std::sqrt(i)
j應為4。
我想知道,是否有可能sqrt返回3.9999999991而不是4.000000001或其他什么,j的結果是3? 是否有定義浮點行為的規則? 我怎樣才能正確地將其轉換為int?
幾乎所有廣泛使用的硬件都使用IETF754浮點數,盡管C ++並不需要它。
假設IETF754浮點數和::std::sqrt
直接映射到IETF754浮點平方根運算,可以確保以下內容:
因此,您的示例將正常工作 。
一般來說,你所暗示的問題可能會發生,但要解決它,你必須提出一個更大的問題:在哪種情況下,一個數字接近積分,真的是積分?
這實際上比看起來更難,因為你想要計算平方根的底限,因此簡單的舍入對你不起作用。 但是,一旦您自己回答了這個問題,實施解決方案應該相當簡單。 例如:
int i = 16;
int j = std::sqrt(i);
if((j + 1) * (j + 1) == i) j += 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.