簡體   English   中英

C ++不能截斷雙打嗎?

[英]C++ not truncating doubles?

我的代碼

運行以下代碼的結果:

#include <cstdio>

//i define printBits elsewhere but that's not relevant to my question
void printBits(const float f);
void printBits(const double f);

int main(int argc, char **argv) {
  float f=4.2;
  double d=4.2;
  printf("float: %20.20f\n",f);
  printBits(f);
  printf("double: %50.50f\n",d);
  printBits(d);

 return 0;
}

是:

float: 4.19999980926513671875
0    10000001 00001100110011001100110

double: 4.20000000000000017763568394002504646778106689453125
0 10000000001 0000110011001100110011001100110011001100110011001101

注意如何將fd都設置為4.2,但float值略小於4.2,double值略大於4.2。 我理解為什么float值小於4.2;為什么? 4.2的值將被截斷為小於4.2的〜2 ^ -21值。 不過,我不明白為什么雙值大於4.2 稍大 我以為float和double值會截斷,但double值是向上取整而不是向下取整。

通常,浮點數和雙精度數是否舍入到最接近的可表示值? 浮球和雙打有不同的回合嗎? 我嘗試搜索此內容,但找不到任何相關內容。

浮點值不會被截斷 ,而是四舍五入為最接近的可表示值。 您發現了一個有趣的示例,其中根據浮點的大小四舍五入的方向不同,但這並不罕見。 您可以預計,舍入的時間大約會增加50%,而舍入的時間會減少50%,其中少量的值可以精確表示並且完全不舍入。 例如4.25將是准確的。

暫無
暫無

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

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