2016-09-19 3 views
1

print(1.0/0)inf을 반환하고 print(0.0/0)은 NaN을 반환하고 컴파일시에는 print(0/0)이 실패합니까?Swift에서 0으로 나눈 컴파일 시간 검사

스위프트는 정수를 0으로 나눈 값을 컴파일하는 시간을 컴파일하지만 부동 소수점/복식은 확인하지 못하는 것 같습니다.

누구에게 설명 할 수 있습니까?

답변

2

부동 소수점 숫자와 그 산술에 대한 IEEE 754 표준은 "무한"과 "숫자가 아님"을 유효한 값으로 정의합니다. 수학적으로 유용하다는 의미에서 "유효"하지 않을 수도 있지만 표준이 정의하는 것입니다. 부동 소수점 숫자로 작동하는 코드 은 특정 작업의 해당 값이 일 것으로 기대하며, 필요에 따라이를 확인/대응할 수 있으므로 스위프트는 FP 연산의 표준을 준수합니다.

정수 산술에 해당하는 언어 간, CPU 독립적 인 표준이 없습니다. Swift 이외에서는 일반적으로 정수를 0으로 나누는 것은 프로그램을 중단 시키거나 잘못된 결과를 생성하는지 반드시 알 필요가 없기 때문에 Bad Thing이라고 가정합니다.

스위프트의 기본 동작은 모든 정수 산술 연산에서 "안전"하므로 유형의 경계를 오버플로하는 연산은 런타임 예외를 발생시킵니다. (즉 0으로 나누기가 포함되어 있습니다.) 신속한 컴파일 시간 상수에 산술 연산을 수행하기 때문에

당신이 문자 코드에 0/0를 넣어

, 당신은 컴파일시 오류가 발생합니다. ( let x = 1 + 2과 같은 코드를 사용하면 프로그램의 모든 실행에 대해 일정하므로 실행시 3 결과를 계산하는 것은 의미가 없습니다.

관련 문제