[英]How should I obtain the fractional part of a floating-point value?
我有一個float
類型的變量x
,我需要它的小數部分。 我知道我可以得到它
x - floorf(x)
,或fmodf(x, 1.0f)
我的問題:其中一個總是比另一個更可取嗎? 它們實際上是一樣的嗎? 我可以考慮第三種選擇嗎?
筆記:
x
負值的行為。 我不介意這種或那種行為,但我需要知道這種行為是什么。我可以考慮第三種選擇嗎?
它有專用的 function。 modff的存在是將數字分解為整數和小數部分。
float modff( float arg, float* iptr );
將給定的浮點值
arg
分解為整數和小數部分,每個部分具有與arg
相同的類型和符號。 整數部分(浮點格式)存儲在iptr
指向的 object 中。
我會說x - floorf(x)
非常好(精確),除了在極端情況下
modff 確實尊重 int 和 frac 部分的 -0.0 符號位,並為 +/-inf 小數部分回答 +/-0.0 - 至少如果實現支持 IEC 60559 標准 (IEEE 754)。
inf 的基本原理可能是:由於每個大於 2^precision 的浮點數都有一個 null 小數部分,因此對於無限浮點數也必須如此。
這是次要的,但仍然不同。
編輯錯誤,當然正如@StoryTeller-UnslanderMonica 所指出的那樣, x - floor(x)
最明顯的缺陷是針對帶有小數部分的負浮點的情況,因為應用於-2.25,例如它將返回+0.75,這不是我們所期望的......
由於使用了 c99 label, x - truncf(x)
會更正確,但仍然會遇到我最初關注的小問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.