簡體   English   中英

給定數字的浮點分辨率

[英]Floating point resolution at a given number

我想知道給定值附近的浮點數的epsilon。

std::numeric_limits<floating_point_type>::epsilon()僅針對數字1.0提供此功能,而我希望函數可以對任何數字使用。

是否有標准庫解決方案? 如果沒有-我應該如何實現該功能?

好吧,最簡單的解決方案是在值的正上方找到epsilon(即,從該值到下一個可表示的值的距離)

std::nextafter(x, std::numeric_limits<floating_point_type>::infinity()) - x

同樣,要找到低於該值的epsilon,您可以

x - std::nextafter(x, -std::numeric_limits<floating_point_type>::infinity())

請注意,如果x是2的冪,則這兩個將不相同。

現在,有一個輕微的警告有:以上所計算的小量FLT_MAX將是無窮大(可以說這是一種正確的答案但它並不完全符合IEEE-754的四舍五入規則)及以上的無限小量將為NaN(其中,好吧,我不知道我對此有何看法)。 在所有其他情況下,結果將是准確的。

暫無
暫無

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

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