부동 소수점 나눗셈과 곱셈의 성능 영향
부동 소수점 나눗셈은 곱셈보다 계산 속도가 느린 것으로 알려져 있습니다. 이 기사에서는 이 주장을 자세히 살펴보고 현대 PC 아키텍처에서 그 타당성을 조사합니다.
부동 소수점 연산에서 나눗셈은 시간 복잡도 측면에서 곱셈을 능가하는 경우가 많습니다. CPU는 일반적으로 1~2 클록 주기 내에 곱셈을 실행하는 반면 나눗셈은 더 긴 프로세스를 요구합니다.
성능 차이를 설명하기 위해 다음 코드 조각을 고려하십시오.
float f1 = 200f / 2; // vs. float f2 = 200f * 0.5;
많은 경우, f2는 나눗셈에 대한 곱셈의 고유한 효율성으로 인해 더 빠르게 계산됩니다.
이러한 성능 차이는 더 복잡한 연산에서도 나타납니다. 예를 들어, 다음 루프는
float f1; float f2 = 2; float f3 = 3; for(i = 0; i < 1e8; i++) { f1 = (i * f2 + i / f3) * 0.5; //or divide by 2.0f, respectively }
나누기에는 반복 단계가 필요하므로 2.0f로 나누는 대신 0.5로 곱셈을 사용하여 더 효율적으로 실행됩니다.
상당한 성능 차이는 다음에서 비롯됩니다. 분할의 구조적 복잡성. 여러 개의 덧셈으로 변환하여 병렬화할 수 있는 곱셈과 달리 나눗셈은 병렬성이 떨어지는 연산인 반복적인 뺄셈을 포함합니다. 이를 보완하기 위해 일부 부동 소수점 단위는 역근사 및 곱셈을 사용하여 효율성을 위해 일부 정확도를 희생합니다.
위 내용은 부동소수점 나눗셈은 최신 CPU의 곱셈보다 정말 느린가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!