부동소수점 연산은 단순 산술비교를 하면 절대 안됨.

이전에 PHP에서도 한 번 당한적이 있는데 홀랑 까먹고 또 실수함.


부동소수점 비교는 epsilon 보정을 하는 비교 함수를 만들어서 사용해야 함.


console.log(0.1 + 0.2);

// => 0.30000000000000004

// PHP에서 var_dump()하면 float(0.3) 나와서 되게 헷갈리는데 그나마 이건 그대로 출력해줘서 다행


console.log(0.1 + 0.2 == 0.3);

// => false


// 이런 함수로 비교해야 함

function isSame(a, b, epsilon) 

{

    if (!epsilon) epsilon = 0.000001;


    return Math.abs(a - b) < epsilon;

}


console.log(isSame(0.1+0.2, 0.3));

// 이건 true






웃기는 만화도 하나 찾았다...

http://www.smbc-comics.com/index.php?db=comics&id=2999








참조

부동소수점 포맷 : https://en.wikipedia.org/wiki/Double-precision_floating-point_format

IEEE 754 : https://en.wikipedia.org/wiki/IEEE_754#Basic_formats







Posted by bloodguy
,