부동소수점 수 (Floating Point Numbers)


부동소수점 수는 실수를 표현하는 방식으로 다음과 같이 표현될 수 있습니다.

<?php
$float0 = 3.14;            // 3.14
$float1 = 3.14e3;          // 3140
$float2 = 3.14E-3;         // 0.00314
?>

e3(또는 E3)은 10의 3제곱인 1000을 곱하는 것을 의미하고, e-3(또는 E-3)은 10의 -3제곱 즉, 10의 3제곱 분의 1을 곱하는 것을 의미합니다.

다른 자료 형에서 부동소수점 수로의 명시적 형 변환을 위한 캐스트 연산자는 (float) 이며 대소문자의 구별은 하지 않습니다.

<?php
$a = 0.1 / 0.3;
printf("%.20e\r\n", $a);   // 결과를 소수점 이하 20자리까지 출력
?>
[출력 결과]  
3.33333333333333370341e-1

위 출력 결과에서 볼 수 있듯이 소수점 이하 15자리 밑으로는 값이 정확하지 않습니다. 이러한 한계점 때문에 부동소수점 수의 직접적인 비교 연산은 사용하지 않는 것이 좋습니다.

  • NAN
    때때로 산술연산의 결과값으로 상수 NAN이 나올 수 있습니다. 이것은 부동소수점연산에서 확실하지 않거나 표현할 수 없는 수를 의미합니다. 이 상수와 자신을 포함한 다른 어떤 수의 값이 같은지를 비교하는 연산의 결과는 항상 FALSE가 됩니다.
<?php
$float0 = acos(2);
if($float0 == $float0)
    echo "True\r\n";         // if문 결과: FALSE
else
    echo "$float0\r\n";
?>
[출력 결과]  
NAN
  • INF
    상수 INF는 부동소수점 연산에서 표현할 수 있는 범위를 넘어가는 수를 의미합니다.
<?php
$float0 = 1.8E+309;
echo "$float0";
?>
[출력 결과]  
INF