今天在牛客網上看到一道面試題,看完之後著實吃了一驚,自己平常都沒有在意,看似簡單的問題,實則考驗了語言的基本功.
據說這是騰訊的面試題:
float x 與“零值”比較的if語句為?
答案為C,fabs為求浮點數絕對值的函數
1 fabs(x) < 0.00001f 2 //等價於(double)-0.00001f < (double)x && (double)x < (double)0.00001f
float的精度就在7,8位左右,自然只能取0.00001了.
假設浮點變量的名字為x,應當將
if (x == 0.0) // 隱含錯誤的比較
轉化為
if ((x>=-EPSINON) && (x<=EPSINON))
其中EPSINON是允許的誤差(即精度).在C中,ANSI C已經定義了這些常量:
載入頭文件#include就可以引用
FLT_EPSILON
DBL_EPSILON
LDBL_EPSILON
這幾個常量了。