這是一個非常菜鳥的問題,但我很想知道這背后的原因: - 如果我除錯以下 C 代碼:
void floatreturn(float i){
//nothing
}
int main(){
float a = 23.976;
floatreturn(a);
return 0;
}
監測的傳遞的值,這似乎是23.9759998進入floatreturn時。因此,對函式中值的任何處理都需要手動調整精度。這有什么原因嗎,有什么辦法可以避免?
uj5u.com熱心網友回復:
之前發生過這個問題floatreturn(a);。
它發生了float a = 23.976;
floatreturn(a);無關緊要。
大約有 2^32 個不同的值float可以精確編碼。23.976 不是其中之一。最近的編碼float是大約 23.9759998 ...
為避免這種情況,請使用可以精確編碼為 afloat或容忍接近的值 - 大約為 2 24 的1 部分
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/364595.html
