簡體   English   中英

C ++ - 如何正確地將double轉換為int

[英]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浮點平方根運算,可以確保以下內容:

  • 16和4都可以用浮點運算精確表示 - 事實上,雙精度浮點數可以精確地表示任何32位整數
  • 平方根返回最接近精確的結果

因此,您的示例將正常工作

一般來說,你所暗示的問題可能會發生,但要解決它,你必須提出一個更大的問題:在哪種情況下,一個數字接近積分,真的是積分?

這實際上比看起來更難,因為你想要計算平方根的底限,因此簡單的舍入對你不起作用。 但是,一旦您自己回答了這個問題,實施解決方案應該相當簡單。 例如:

int i = 16;
int j = std::sqrt(i);
if((j + 1) * (j + 1) == i) j += 1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM