[英]C - floating point rounding
我試圖理解浮點數是如何工作的。
我想通過評估以下內容來測試我知道/需要學習的內容:我想找到最小的x
,使得x + 1 = x
,其中x
是浮點數。
據我所知,這種情況會發生在x
足夠大的情況下,使得x + 1
比x更接近x,而下一個數字高於浮點所代表的x。 如此直觀地看起來就是我在有效數字中沒有足夠數字的情況。 這個數字x是否是有效數字為1的數字。 但后來我似乎無法弄清楚指數必須是什么。 顯然它必須很大(相對於10 ^ 0,無論如何)。
你只需要用指數表示尾數中LS位的值。 當這個> 1時,你就達到了你的條件。 對於單精度浮點數,LS位的值為2 ^ -24 * 2 ^ exp,因此當exp> 24時我將滿足條件,即25.滿足此條件的最小(標准化)數將因此是1.0 * 2 ^ 25 = 33554432.0f。
我沒有檢查過這個,所以我的數學可能會偏離某個地方(例如2倍),並且FP單元也可能會超出第24位,因此可能還需要2倍的因子來計算這個,但你得到了一般的想法......
從1.0開始,並保持加倍,直到測試成功:
double x;
for (x = 1.0; x + 1 != x; x *= 2) { }
printf("%g + 1 = %g\n", x, x + 1);
我建議在嘗試理解fp數字和fp算術時,你在十進制中工作,有效數字為5位,指數為2。 (或者,如果5和2不適合你,6和3或你喜歡的任何其他小數字。)問題:
更容易理解十進制,你學到的課程是完全一般的。 一旦你弄明白這一點,用IEEE fp算法增強你的知識將是相對簡單的。 您還可以相對輕松地找出其他fp算術系統。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.