比方說,我有兩個對象i
和f
各自類型I
和F
。我知道std::is_integral<I>::value
爲真,並且std::is_floating_point<F>::value
爲真。符合標準的方法來比較float到積分?
是否有完全符合標準的方法來確定i
的值是否小於值f
?注意強調'完全符合標準',對於這個問題,我只對那些由C++標準提供保證的答案感興趣。
瑣碎實現i < I(f)
不起作用,因爲f
值可能不適合內部i
。由於f
的精度可能不足以代表i
,導致i
四捨五入到等於f
的值(如果您有IEEE754浮點數,16777219 < 16777220.f
失敗),所以微不足道的實現F(i) < f
也不起作用。
但是,真正的困境是:如果您想用std::numeric_limits::max
來緩解這些問題,那麼您可以回到比較浮點數和整數的原始問題!這是因爲std::numeric_limits::max
的類型等於原始類型。
「對於這個問題,我只是在被從C++標準保證備份的答案感興趣」是不合理的,傻這個問題的要求。這類似於要求實現冒泡排序的方式,並且要求由C++標準來備份答案。 C++標準對泡沫排序沒有什麼可說的。 –
'我
Barry
@ Cheersandhth.-Alf我不同意。問題的關鍵在於找到一種在任何C++實現上都有明確定義的方法。你可以做到這一點泡沫排序,但我不確定你可以進行這種比較,因此我的問題。 – orlp