簡體   English   中英

printf() 是否修改其參數?

[英]Does printf() modify its parameters?

我試圖了解不同的語言如何處理浮點數。 我知道浮點表示存在一些固有的問題,這就是為什么如果你在 Python 中做 0.3 + 0.6,你會得到 0.899999 而不是 0.9

然而,這些代碼片段讓我震驚:

double x = 0.1,
    sum = 0;

for(int i=0; i<10; ++i) 
    sum += x;

printf("%.9lf\n",sum);
assert(sum == 1.0);

上面的代碼片段工作正常。 它打印 1.0。 但是,由於斷言失敗,以下代碼段給出了運行時錯誤:

double x = 0.1,
    sum = 0;

for(int i=0; i<10; ++i) 
    sum += x;

assert(sum == 1.0);
printf("%.9lf\n",sum);

上面兩個片段中唯一的變化是 assert 和 printf 語句的順序。 這讓我認為 printf 正在以某種方式修改其參數並以某種方式將它們四舍五入。

有人可以對此有所了解嗎?

某些處理器,例如 x86,具有比數據類型精度更高的浮點寄存器(80 位,而雙精度則為 64 位)。 調用 printf() 會使這些寄存器存儲在堆棧中,其中只有 64 位分配給變量。 這會導致您觀察到的差異。

有關更多信息,請參閱 每個計算機科學家應該了解的有關浮點運算的知識。

printf()不修改其參數。

我無法想象向錯誤尋求幫助而不是說明您遇到了什么錯誤。 你的意思是它斷言。 您確定兩者都沒有斷言,但出於某種原因,您只能看到在printf()之前斷言的那個嗎?

暫無
暫無

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

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