문제

정수 계산을 시전 할 수있는 지침 또는 매개 변수가있는 컴파일러가 암시 적으로 플로팅됩니다. 예를 들어:

float f = (1/3)*5;
cout << f;

계산 상수 (1, 3, 10)가 정수이기 때문에 "F"는 "0"입니다. 정수 계산을 컴파일러 지침 또는 매개 변수로 변환하고 싶습니다. 내 말은, 나는 명시 적 주조 또는 ".f"접두사를 사용하지 않을 것입니다.

float f = ((float)1/3)*5;

또는

float f = (1.0f/3.0f)*5.0f;

명시 적 주조 또는 ".f"일 없이이 프로세스를 수행 할 매개 변수가있는 C/C ++ 컴파일러를 알고 있습니까?

도움이 되었습니까?

해결책

언급 한 두 가지 방법 중 하나가 마음에 들지 않으면 운이 좋을 것입니다.

이것으로 무엇을 성취하기를 바라고 있습니까? "플로트 디비전"을 한 모든 특수 운영자는 토큰 화 후 어느 시점에서 INT를 플로트로 변환해야하므로 실행에 대한 성능 이점을 얻지 못할 것입니다.

다른 팁

원하는 작업을 수행 한 컴파일러는 더 이상 C ++ 컴파일러가 아닙니다. 정수 부서의 의미론은 잘 지정되어 있으며 (적어도 양수의 경우), 당신은 그것을 변경할 것을 제안하고 있습니다.

그것은 또한 모든 것에 적용하기 때문에 위험 할 것이며, 어느 시점에서 표준 정수 산술에 의존하는 코드가있을 수 있습니다. (결국, 당신이 그것을 잡을 테스트를 받았다면, 아마도 당신은 아마도 원하지 않는 정수 산술을 잡을 테스트가있을 것입니다.)

따라서 제가 가진 유일한 조언은 단위 테스트를 작성하고 코드 리뷰를 작성하고 마법 숫자를 피하려고 시도하는 것입니다 (대신 const float).

C ++에서는 코드를 통해 많은 숫자 값이 뿌려진 것을 보는 것이 약간 이상합니다. 일반적으로 이것들과 같은 '마법 숫자'를 자신의 정적 const float 값으로 옮기는 것이 가장 모범 사례로 간주되며,이 문제는이 문제를 제거합니다.

아니요,이 두 가지 옵션은 당신이 가진 최고입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top