Float 값이 템플릿 매개변수로 허용되지 않는 이유
C에서는 float 값을 템플릿 매개변수로 사용하려고 합니다. 다음 코드를 사용하면 다음 오류가 발생합니다.
GenericClass<float, 4.6f> gcFloat; error: `float' is not a valid type for a template constant parameter
표준 금지
C 11 표준에 따르면 비유형 템플릿 인수는 다음 중 하나여야 합니다.
그러나 부동 소수점 값은 이들 중 어느 것에도 맞지 않습니다.
추론
이 제한의 주된 이유는 부동 소수점 계산의 부정확한 특성 때문입니다. 부동 소수점 계산은 정확하게 표현할 수 없으므로 이를 템플릿 인수로 사용할 때 예기치 않은 동작이 발생할 수 있습니다. 예를 들어 다음 코드는 잠재적인 반올림 차이로 인해 의도한 대로 작동하지 않을 수 있습니다.
func<1/3.f>(); func<2/6.f>();
대체 솔루션
부동 소수점 값을 템플릿 인수로 표현하려면 다음을 고려하세요. C 11의 고급 상수 표현식(consexpr)을 사용하여 컴파일 타임에 부동 값의 분자와 분모를 계산합니다. 그런 다음 이를 별도의 정수 인수로 전달할 수 있습니다. 그러나 서로 가까운 부동 소수점 값이 동일한 분자/분모 비율을 생성하도록 임계값을 정의하는 것이 중요합니다.
위 내용은 부동 소수점 숫자를 C 템플릿 매개변수로 사용할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!