我以前見過static_cast<int>(std::ceil(floatValue));
。向上舍入到一個整數,這有多可靠?
雖然我的問題是,我絕對可以指望這不是「不必要的」四捨五入嗎?我讀過一些整數不能用浮點數來完美表示,所以我擔心的是,當邏輯上不應該這樣做時,極小的「錯誤」會使ceil()
向上舍入。不僅如此,而且一旦取整,我擔心代表中的一個小「錯誤」可能會導致數字略小於整數,導致cast轉換爲int來截斷它。
這難道沒有根據嗎?我記得有一段時間,python中的一個例子是打印一個特定的整數,這會導致它打印的東西很少(比如x.999,但我不記得確切的數字)
我需要的原因是請確保,我正在寫紋理緩衝區。常見的情況是整數作爲浮點數,但它偶爾會在需要四捨五入到包含它們的最接近的整數寬度和高度的值之間。它以2的冪次遞增,因此不必要的舍入成本可能導致應該只採用256x256紋理的紋理需要512x512紋理。
這取決於'floatValue'的範圍。什麼*是*範圍? – NPE
範圍是0.0到〜1024.0(我認爲我不需要擔心超出該範圍的值) –
無法表示爲浮點數的整數將四捨五入爲另一個整數(某個倍數的倍數兩個),而不是稍微低於或高於整數的一部分。但是,一些算術(對於實數)會導致整數,可能會導致略小於或大於整數。然而,這與預先發生的事情無關。 – delnan