나는 d == (double)(float)d
을 읽었습니다. 여기서 d는 double
으로 평가되지 않습니다.
우리는 정밀도가 낮은 유형으로 캐스팅하기 때문에 의미가 있습니다. 그러나 예제로 주어진 숫자는 이해할 수 없습니다.double에서 float으로의 캐스팅
1110101100011001010011111000111000011010111001010010010111111101010111011100111110101011000010000000000000000000000000000000000000000
그리고 무한대가 지수로 표시되는 모두 1 및 분획 모두 0 :
그것은 인 D 인 경우 1e40
식이 + 무한대
그러나 1e40
의 비트 패턴을 평가하게했다.
캐스팅을 통해이 구체적인 예를 무한대로 어떻게 줄일 수 있습니까?
무한대를 나타내는 비트 패턴으로 끝나는 비트 패턴의 일부를 "잘라내는"문제가 아닌가? 정수와 마찬가지로 비트 패턴의 일부를 캐스팅 할 때 보존 됨 – Cratylus
@Cratylus 부호있는 정수의 경우 ('signed char x = 256;'과 같이) 실제로 C로 구현에 정의되어 있습니다. 부동 소수점의 경우, 기본 반올림 지정을 사용하는 IEEE-754의 결과는 여기에서 양의 무한대입니다. – ouah
이 답변은 "X가 최대 [유한] 부동 소수점 값보다 커서 따라서 X가 부동 소수점으로'+ inf'"가 적용되는 것처럼 들립니다. 이 논리는 '1e40'에서 작동하지만 잘못된 것입니다. float '+ inf'로 반올림 할 수있는 최소 숫자는 정확히 16 진수로 0x1.ffffffp127 또는 10 진수의 대략 3.4028235678E38입니다. –