programing

음의 부동 소수점 값을 부호 없는 int로 변환할 때의 동작은 무엇입니까?

bestprogram 2023. 10. 4. 22:12

음의 부동 소수점 값을 부호 없는 int로 변환할 때의 동작은 무엇입니까?

음의 부동 소수점 값을 부호 없는 적분형 값으로 변환하면 어떻게 됩니까?표준 견적을 주시면 감사하겠습니다.제가 직면한 문제는 부동 소수점 유형의 객체를 포함하는 변형 클래스에서 부호 없는 적분 유형의 값으로 변환하는 것입니다.

예:

unsigned i = -.1;

음의 값이 -1.0 이하인 경우 적분 부분을 부호 없는 숫자로 나타낼 수 없으므로 정의되지 않은 동작을 호출합니다.그렇지 않으면 (-0.1의 경우처럼) 정수형으로 나타낼 수 있다면 잘 정의된 동작입니다.C11 표준, ISO 9899:2011 참조:

6.3.1.4

실제 플로팅 유형의 유한 값을 _Boole 이외의 정수 유형으로 변환하면 부분 부분이 삭제됩니다(즉, 값이 0으로 잘림).정수형으로 적분부분의 값을 나타낼 수 없는 경우 동작은 미정의(undefined) 61)

그리고 위의 글을 설명하는 비규범적인 발 노트가 있습니다.

61) 정수형 값이 부호 없는 타입으로 변환되었을 때 수행되는 잔여 작업은 실제 부동태형 값이 부호 없는 타입으로 변환되었을 때 수행할 필요가 없습니다.따라서 휴대용 실제 부동값의 범위는 (-1, Utype_)입니다.MAX+1).

ISO/IEC 9899:1999(C99)는 정확히 동일한 텍스트를 포함합니다.

부동 소수점 번호가 -1.0 이하일 경우 C99에서 정의되지 않은 동작입니다.(-1.0, 0.0) 범위이면 결과 값은 0이 됩니다.

C99, §6.3.1.4항, 제1항

실제 플로팅 유형의 유한 값을 _Boole 이외의 정수 유형으로 변환하면 부분 부분이 삭제됩니다(즉, 값이 0으로 잘림).정수형으로 적분부분의 값을 나타낼 수 없는 경우 동작이 정의되지 않습니다.

각주 50은 (-1.0, 0.0) 범위에 대한 동작을 설명합니다.

예를 ,unsigned i = -.1;C11과 C99에 의해 잘 정의되며, 결과는i == 0.

N1570, 6.3.1.4 Real floating 및 정수에서 인용:

  1. 실제 플로팅 유형의 유한 값을 _Boole 이외의 정수 유형으로 변환하면 부분 부분이 삭제됩니다(즉, 값이 0으로 잘림).정수형으로 적분부분의 값을 나타낼 수 없으면 동작이 정의되지 않습니다.61)

61) 정수형 값이 부호 없는 타입으로 변환되었을 때 수행되는 잔여 작업은 실제 부동태형 값이 부호 없는 타입으로 변환되었을 때 수행할 필요가 없습니다.따라서 휴대용 실제 부동값의 범위는 (-1, Utype_)입니다.MAX+1).

N869, 6.3.1.4 Real floating 및 정수에서 인용:

#1

실제 플로팅 유형의 유한 값을 _Boole 이외의 정수 유형으로 변환하면 부분 부분이 삭제됩니다(즉, 값이 0으로 잘림).정수형으로 적분 부분의 값을 나타낼 수 없으면 동작이 정의되지 않습니다.43)

43) 정수형 값을 부호형이 아닌 값으로 변환하였을 때 수행하는 잔여 작업은 실제 부동형 값을 부호형이 아닌 값으로 변환하였을 때 수행할 필요가 없습니다.따라서 휴대용 실제 부동값의 범위는 (-1, Utype_)입니다.MAX+1).

그러나 인용문에서 볼 수 있듯이 부동 소수점 상수를 범위(-1, Utype_) 밖으로 변환하려고 합니다.MAX+1)에서 정의되지 않은 동작을 호출합니다.

언급URL : https://stackoverflow.com/questions/36443556/what-is-the-behaviour-on-converting-a-negative-floating-point-value-into-an-unsi