簡體   English   中英

強制轉換為for循環,之后強制返回不返回相同的值

[英]cast in for-loop and cast after doesn't return the same value

我只是嘗試自己創建一個floor函數,它似乎可以工作,但是for循環存在一些問題。 我發現強制轉換總是返回數字的下限,但有時似乎更棘手。 這是代碼:

for (double i = 0; i < 2.0; i+=0.1) {
    printf("i = %f, floor(i) = %d\n", i, (int)i);
}

printf("(int)1.0 = %d\n", (int)1.0);

在構建和啟動此代碼時,對於i = 1.0(int)i返回0 ,但在printf(int)1.0 = 1 所以,我有點困惑。

有人可以幫助我理解為什么嗎?

由於浮點數為0.1 + 0.1 + ...導致精度損失,您遇到了問題,即noy等於1.0。 您可以檢查每位計算機科學家應該知道的有關浮點運算的知識

0.1在雙精度中看起來像這樣。 如果以二進制形式編寫,則將其截斷為57個有效位:

0.000110011001100110011001100110011001100110011001100110011001…

第54位及以上位的總和大於第53位的值的一半,因此將其舍入為

0.0001100110011001100110011001100110011001100110011001101

用十進制表示

0.1000000000000000055511151231257827021181583404541015625

略大於0.1,因此出乎意料。

暫無
暫無

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

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