> 백엔드 개발 > C++ > C/C에는 부동 소수점 숫자에 대한 표준 부호 기능이 있습니까?

C/C에는 부동 소수점 숫자에 대한 표준 부호 기능이 있습니까?

Susan Sarandon
풀어 주다: 2024-12-16 12:58:11
원래의
937명이 탐색했습니다.

Does C/C   Have a Standard Sign Function for Floating-Point Numbers?

C/C에 표준 부호 기능이 있나요?

질문:

I 음수의 경우 -1, 양수의 경우 1을 출력하는 함수를 찾고 있습니다. 단순함에도 불구하고 이 기능은 어딘가의 표준 라이브러리에서 사용할 수 있을 것으로 생각됩니다. 특히, float 데이터 유형에서 작동하는 함수가 필요합니다.

답변:

예, 이러한 목적을 수행하는 표준 C 함수인 signum이 있습니다. 그러나 이 함수는 유형이 안전하다는 점에 유의하는 것이 중요합니다. 즉, 부동 소수점뿐만 아니라 다양한 데이터 유형에 대해 작동할 수 있다는 의미입니다. 다음은 signum의 일반 구현입니다.

template <typename T>
int sgn(T val) {
    return (T(0) < val) - (val < T(0));
}
로그인 후 복사

이 함수는 사용자 정의 구현에 비해 여러 가지 장점을 제공합니다.

  • 정확한 Signum 구현: 음수에 대해 -1을 렌더링합니다. 숫자, 0은 0, 1은 양수입니다.
  • 유형 다용성: 정수, 부동 소수점, 복식 및 기타 다양한 데이터 유형에서 작동할 수 있습니다.
  • 효율성: 분기 없는 구현은 예외를 위해 컴파일러 최적화를 활용합니다. 성능.

사용:

int sign = sgn(-1.5); // -1
sign = sgn(0.0);      // 0
sign = sgn(3.14);     // 1
로그인 후 복사

주의사항:

  • 편집 시간 : 템플릿이므로 컴파일 시간이 더 길어질 수 있습니다. 특정 시나리오.
  • 비전통적인 구문: 일부는 부호 기능을 정확하게 구현하지 않더라도 표준 라이브러리 함수인 copysign 사용을 선호할 수 있습니다.
  • 경고 트리거: 부호 없는 유형과 함께 사용하면 GCC에서 "-Wtype-limits" 경고를 트리거할 수 있습니다. 이 문제를 해결하려면 오버로드가 포함된 템플릿 전문화를 사용할 수 있습니다.

결론적으로 signum 함수는 C에서 숫자의 부호를 결정하기 위한 다양하고 효율적인 솔루션을 제공합니다. 표준 라이브러리의 부동 소수점에 직접 사용할 수는 없지만 유형이 안전한 구현을 통해 광범위한 데이터 유형에서 놀라운 정확도로 사용할 수 있습니다.

위 내용은 C/C에는 부동 소수점 숫자에 대한 표준 부호 기능이 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿