EPSとは、浮動小数点演算の過程で発生する演算誤差により、 比較結果がおかしくなることを防ぐために使われる小さな値である。
主に1e-7から1e-10程度が使用されると(要出典)には書かれている。 しかしながら32ビット浮動小数点数が主流のUnityなどでは1e-3から1e-5あたりもよく使われる。
#include <math.h> #define EPS 1e-7 double a,b; a<b+EPS /* a<=b */ a+EPS<b /* a<b */ fabs(a-b)<EPS /* a==b */
#include <stdio.h> #define EPS 1e-7 int main(void) { double a; for(a=0.0;a+EPS<10.0;a+=0.1) { printf("%.1f\n",a); } return 0; }
このコードはよく実数演算の誤差により意図しない結果が出てくる例として示されるコードを改良したものであるが、 EPSを使用することにより比較結果が直感に近くなっていることがわかる。