에서 stdint.h
(C99), 부스트 / cstdint.hpp , 및 cstdint
(C + +0)가 헤더, 다른 사람의 사이에서, 유형 int32_t
.
비슷한 고정 크기 부동 소수점 유형이 있습니까? 같은 거 float32_t
?
에서 stdint.h
(C99), 부스트 / cstdint.hpp , 및 cstdint
(C + +0)가 헤더, 다른 사람의 사이에서, 유형 int32_t
.
비슷한 고정 크기 부동 소수점 유형이 있습니까? 같은 거 float32_t
?
sizeof
연산자 를 사용하세요 . 이와 같은 유형은 알고리즘이 알려진 특정 크기를 요구할 때 유용합니다.
sizeof
일관된 마샬링 및 플로팅 유형 마샬링 문제를 해결하는 데 어떻게 사용할 수 있습니까?
답변:
현재 C 또는 C ++ 표준에는 이와 같은 것이 없습니다. 사실, float
이진 부동 소수점 형식이 될 것이라는 보장조차 전혀 없습니다 .
일부 컴파일러는 float
유형이 IEEE-754 32 비트 이진 형식 임을 보장 합니다. 일부는 그렇지 않습니다. 실제로, float
실제로 IEEE-754 인 single
에 유형 가장 넓은 형식으로 식을 평가하는 어떤 컴파일러에 대한 일반적인주의 사항이 적용하지만, 비 임베디드 플랫폼.
2008 년 IEEE-754 개정판에 대한 C 언어 바인딩 추가를 논의하는 작업 그룹이 있으며, 이러한 typedef 추가를 권장 할 수 있습니다. 이것이 C에 추가되면 C ++ 표준이 결국 따라 올 것이라고 예상합니다.
당신이 당신의 여부를 알고 싶은 경우 float
는 IEEE 32 비트 형식입니다 확인 std::numeric_limits<float>::is_iec559
. 함수가 아니라 컴파일 타임 상수입니다.
더 방탄하고 싶다면 std::numeric_limits<float>::digits
.NET 용 IEEE 표준 배정 밀도를 몰래 사용하지 않는지 확인하십시오 float
. 24이어야합니다.
이에 올 때 long double
, 그것을 확인하는 것이 더 중요하다 digits
128 비트 (숫자 = 113) 또는 80 비트 (숫자 = 64) : 합리적이 될 수있는 몇 IEEE 형식이 있기 때문에.
float32_t
일반적으로 사용 가능한 경우 부동 소수점 하드웨어를 사용하고 소프트웨어 구현에 의존하지 않기를 원하기 때문에 그렇게 하는 것은 실용적이지 않습니다.
long double
OS X (32 비트 및 64 비트 인텔)의 형식을 정확하게 리틀 엔디안 순서로 저장되어있는 IEEE-754 배 확장 된 형식이다. 그것에 대해 전혀 펑키하지 않습니다. 바이트 0-7은 유효 필드를 보유하고 바이트 8 및 9는 지수 및 부호 필드를 보유합니다.
5.0L
유효 숫자가 a000000000000000
. 편향되지 않은 지수는 +2이고 이중 확장 지수 편향은 3fff
이므로 5.0L에 대한 편향 지수는 4001
입니다. 리틀 엔디안 순서로 저장 될 때의 실제 바이트 패턴은 00 00 00 00 00 00 00 a0 01 40
입니다. 두 개의 리틀 엔디안 64 비트 정수로 보면 정확히 관찰 한 것을 볼 수 있습니다.
4001
little-endian에서 01 40 00 00 ...
다른 것이 없다면 최하위 바이트가 먼저옵니다. 나는 순서가 기대 a0 01 40
(그들은 단지 회전을 수행 한 경우) 수 어딘가에 표시하지만 난 왜 설명했다고 생각하지 않습니다 a0
와 01 40
완전히 분리 된 반쪽에 있습니다.
어떤 이유로 든 float32_t 및 float64_t와 같은 typedef를 사용하는 것이 비현실적이라고 생각한다면 익숙한 OS, 컴파일러에 너무 익숙해야 작은 둥지 밖을 볼 수 없습니다.
기본적으로 32 비트 IEEE 부동 소수점 연산을 실행하는 하드웨어와 64 비트를 실행하는 다른 하드웨어가 있습니다. 때로는 그러한 시스템이 서로 통신해야하는 경우도 있습니다.이 경우 각 플랫폼에서 double이 32 비트인지 64 비트인지 아는 것이 매우 중요합니다. 32 비트 플랫폼이 다른 64 비트 값을 기반으로 과도한 계산을 수행하는 경우 타이밍 및 속도 요구 사항에 따라 더 낮은 정밀도로 캐스트 할 수 있습니다.
나는 내 플랫폼에 얼마나 많은 비트가 있는지 정확히 알지 못하면 수레와 복식을 사용하는 것이 개인적으로 불편합니다. 일부 통신 채널을 통해 다른 플랫폼으로 전송하려면 더욱 그렇습니다.
현재 다음 유형을 언어에 추가하는 제안이 있습니다.
decimal32
decimal64
decimal128
언젠가를 통해 액세스 할 수 있습니다 #include <decimal>
.
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3871.html