簡體   English   中英

C - 浮點舍入

[英]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或你喜歡的任何其他小數字。)問題:

  • 可以表示的有限數字集;
  • 非交換性,非關聯性和非分配性;
  • 將fp數字視為實數時可能出現的問題;

更容易理解十進制,你學到的課程是完全一般的。 一旦你弄明白這一點,用IEEE fp算法增強你的知識將是相對簡單的。 您還可以相對輕松地找出其他fp算術系統。

暫無
暫無

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

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