안전 나누기 (및 모듈로) 기능을 정의하고 싶습니다.이 기능은 0으로 나누려고 할 때 미리 정의 된 값을 반환합니다. 예외를 던지려는 것이 아니라 "합리적인"값 (1? 0?)을 반환하고 프로그램 흐름을 계속하기를 원합니다. 분명히 올바른 반환 값은 없지만이 표준 또는 알려진 방법이 있는지 궁금합니다.안전 나누기 기능
답변
IEEE 부동 소수점 표준은 division by zero에서 얻을 항목을 정의합니다.
- + A/+0가 + Inf를 제공
- 은/-0은 -Inf를 제공
- 0/0는 정수로 작업하는 경우 NaN의
, 당신은이 표준을 사용할 수 있습니다 + 자신의 루틴을 정의 할 수 있지만, 정수 논리에서 Inf가 무엇이고 NaN이 무엇인지 정의해야합니다. 난이 있으리라 믿고있어
흥미 롭습니다. 그렇다면 + Inf/-Inf/Nan을 반환하고 FPU가 던진 제로 예외를 피할 수 있습니까? – GabiMe
표준에서 허용하는 옵션입니다. 그렇습니다. – MSalters
@bugspy : 기본값은 FPU가 예외를 throw하지 않는 것입니다. FP에 대해 묻는다면 플랫폼은 무엇입니까? – Potatoswatter
출력 매개 변수로 값을 반환 할 수 있습니다. 함수 반환 형식은 bool 일 수 있으며 성공하면 true를, 0으로 나누면 false를 반환합니다. 그런 다음 기능을 수행 한 후 사실을 확인하십시오. 그러나 현대적인 접근 방식은 대신 예외를 던져 클라이언트 코드에서 잡습니다. 원하는 경우 무시할 수 있습니다.
는 IEEE 수레가 이미
문제를 해결로의 int에 대한 것은 당신이 예에 합격해야합니다, 그래서 값이 사용에 따라 '합리적인'가 무엇인지입니다
DivOrDefault(int a, int b, int def)
{
if (b == 0) return def;
return a/b;
}
또는 당신
ieee는 어떻게 이것을 해결합니까? – GabiMe
mouviciel 님의 답변을보세요. –
INF가/할머니 중 밴드 (당신은 또한 INF와 나 유모에 대한 부울이있는 구조체의 INT를 래핑 수) 신호 또는 아웃 오브 밴드 (out of band) (m_pGaldiator으로 제시) 할 수 당신은 특히 당신이
pair< int, bool > safe_div(int lhs, int rhs) {
if (rhs == 0 || lhs == INT_MIN && rhs == -1) return make_pair(0, false);
else return make_pair(lhs/rhs, true);
}
를 교대 할 수있는 C++를 요청할 것 때문에 boost::optional
optional<int> safe_div(int lhs, int rhs) {
if (rhs == 0 || lhs == INT_MIN && rhs == -1) return optional<int>();
else return lhs/rhs;
}
,
정수 연산이 필요하다고 가정하고 오버플로에 대한 검사를 추가했습니다.
- 1. 기능 C++ (안전 코드)
- 2. Microsoft의 문자열 안전 기능 정보
- 3. 라이센스 방식 스푸핑 안전 및 취소 기능
- 4. 안전
- 5. 추가 jConfrim 나누기
- 6. 단락 나누기
- 7. 수량 나누기
- 8. 문자열 나누기
- 9. 무한대로 나누기
- 10. 안전 제어 항목
- 11. 제거 - 안전
- 12. 안전 솔루션은
- 13. 스레드 안전
- 14. 안전 배포
- 15. 파이썬 반복자 및 스레드 안전
- 16. 명명 된 범위 나누기 코드
- 17. 세계를 4 사분면으로 나누기
- 18. 내 코드에서 0으로 나누기
- 19. div 요소 나누기
- 20. 그룹화의 조건부 페이지 나누기
- 21. ASP.NET에서 html 테이블 나누기
- 22. 부분으로 정수 나누기
- 23. numpy 축을 따라 나누기
- 24. PHP 배열 나누기
- 25. SSRS - 페이지 나누기 문제
- 26. 입체와 복식 나누기
- 27. 문자열 값을 나누기 C#
- 28. 값 목록 나누기
- 29. 단어 배열로 문자열 나누기
- 30. 탭 텍스트로 나누기
try/catch 블록의 문제점은 무엇입니까? –
"int div (int a, int b, bool * bOK = 0);" 결과가 유효한지 알고 싶으면 bool 포인터를 전달하십시오. – Thomi
프로그램이 나빠질수록 프로그램을 더 잘 볼 수 있습니다. 어떤 아이들도 나누지 않은 사과 조각에는 "적당한"크기가 없습니다. 이에 대한 "표준 접근 방식"은 오류를 수정하는 것입니다. – sbi