부동 소수점 번호는 컴퓨터에서 실수의 근사치이지만 완전히 정확하지는 않습니다. PHP는 IEEE 754 표준을 사용하여 부동 소수점 번호를 나타냅니다. 이는 일부 소수점에 약간의 오류가있을 수 있음을 의미합니다. 실제 애플리케이션 에서이 오류는 정확한 계산 결과, 특히 정확한 계산이 필요한 삼각 기능과 관련된 시나리오에서 부정확 한 계산 결과로 이어질 수 있습니다.
예를 들어, ASIN 함수로 전달하는 값이 1.0000000001 이며, 이는 분명히 ASIN 기능 (-1 ~ 1)의 유효한 입력 범위를 넘어서는 것을 가정 해 봅시다. 이 값은 수학적으로 1에 매우 가깝지만 컴퓨터 내부의 부동 소수점 표현으로 인해 오류가 발생할 수 있습니다.
부동 소수점 오류로 인한 오류를 피하기 위해 다음 방법을 사용하여 ASIN 함수의 입력 값이 유효하고 정확한지 확인할 수 있습니다.
ASIN 함수는 [-1, 1] 범위에서만 값을 수용하므로 먼저 입력 값 이이 범위 내에 있는지 확인해야합니다. 이 범위 이외의 값으로 인해 PHP는 경고를 던지고 NAN을 반환합니다 (숫자가 아님). ASIN을 호출하기 전에 코드를 사용하여 입력 범위를 제한 할 수 있습니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-number">1.0000000001</span></span><span>; </span><span><span class="hljs-comment">// 이것이 부동 소수점 입력 값이라고 가정하십시오</span></span><span>
</span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-title function_ invoke__">max</span></span><span>(-</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-title function_ invoke__">min</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-variable">$value</span></span><span>)); </span><span><span class="hljs-comment">// 입력 범위를 제한합니다 [-1, 1] ~ 사이</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">asin</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"asin(<span class="hljs-subst">$value</span></span></span><span>) = </span><span><span class="hljs-subst">$result</span></span><span>";
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
MAX 및 MIN 함수를 통해 전달 된 값이 ASIN 기능의 유효한 범위를 초과하지 않도록하여 불필요한 오류를 피할 수 있습니다.
부동 소수점 번호의 정확성으로 인해 Round () 함수를 반올림하거나 사용하여 입력 값이 가능한 한 예상 값에 가깝게 보장함으로써 약간의 사소한 오류를 수정할 수 있습니다. 예를 들어:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-number">1.0000000001</span></span><span>; </span><span><span class="hljs-comment">// 플로팅 포인트 입력 값</span></span><span>
</span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-title function_ invoke__">round</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>); </span><span><span class="hljs-comment">// 둥글게 소수점까지 10 조금</span></span><span>
</span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-title function_ invoke__">max</span></span><span>(-</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-title function_ invoke__">min</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-variable">$value</span></span><span>)); </span><span><span class="hljs-comment">// 입력 범위를 제한합니다</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">asin</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"asin(<span class="hljs-subst">$value</span></span></span><span>) = </span><span><span class="hljs-subst">$result</span></span><span>";
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Round ()를 사용하여 정밀 문제로 인한 오류를 피하기 위해 부동 소수점 번호의 정확도를 제어하십시오.
경우에 따라 범위 제한이 완료 되더라도 정확도 문제로 인해 계산 결과가 여전히 NAN 일 수 있습니다. 따라서 계산을 수행하기 전에 들어오는 값이 유효한지 확인하고 불필요한 경고를 피할 수 있습니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-number">1.0000000001</span></span><span>;
</span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-title function_ invoke__">max</span></span><span>(-</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-title function_ invoke__">min</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-variable">$value</span></span><span>)); </span><span><span class="hljs-comment">// 입력 범위를 제한합니다</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">asin</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_nan</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"계산 결과는 다음과 같습니다 NAN,입력 값의 유효성을 확인하십시오。\n"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"asin(<span class="hljs-subst">$value</span></span></span><span>) = </span><span><span class="hljs-subst">$result</span></span><span>\n";
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
이 방법은 입력 값이 유효하지 않으면 프로그램이 직접 오류를보고하거나 무의미한 결과를 반환하는 대신 우아하게 처리하고 프롬프트를 제공 할 수 있도록합니다.
입력 값을 적절하게 처리하고 제한함으로써 PHP에서 ASIN 기능을 효과적으로 사용하여 부동 소수점 오류로 인한 부정확 한 문제를 피할 수 있습니다. 일반적인 방법은 다음과 같습니다.
제한 입력 범위 : 입력 값이 -1에서 1 사이인지 확인하십시오.
오류 수정 : Round () 또는 기타 정밀 제어 방법을 사용하여 플로팅 포인트 번호의 오류를 수정하십시오.
NAN 값 확인 : 계산 결과를 확인하여 합리적인 값이 출력되는지 확인하십시오.
이러한 방법을 사용하면 ASIN 기능 계산의 정확도가 향상되고 부동 소수점 오류로 인한 문제가 줄어들 수 있습니다.