문제

네트워크를 통해 이중 부동 소수점 값(물론 올바른 바이트 순서로 조정됨)을 전송하고 이를 다른 CPU 아키텍처, 특히 i386, mips(서로 다른 코어 몇 개), powerpc(e300, e500)에서 교환 가능하게 사용해도 괜찮습니까?매우 오래된 하드웨어는 없습니다.

모든 아키텍처에 대해 -Os와 함께 gcc 4.2.1을 컴파일러로 사용합니다.

아마도 그것은 어디에서나 IEEE-754 표준일 것입니다(그렇습니까?). 그러나 Wikipedia에서는 다음과 같이 말합니다.

IEEE 754-1985는 구현에 있어 다양한 변형을 허용했습니다(예: 일부 값의 인코딩 및 특정 예외 감지).IEEE 754-2008은 이들 중 많은 부분을 강화했지만 여전히 몇 가지 변형이 남아 있습니다(특히 바이너리 형식의 경우).

NaN이나 다른 특별한 내용을 전달하려는 의도는 없었고 유효한 십진수만 전달했습니다.

도움이 되었습니까?

해결책

정규화된 숫자 표현을 보내려는 경우 모든 최신 아키텍처에서는 완전히 안전합니다.의심스러운 경우 아키텍처 매뉴얼을 확인하세요.비정규화된 숫자의 경우 확인해야 합니다.

물론 올바른 바이트 순서를 사용하여 바이트로 분해하고 반대쪽 끝에서 재조립할 수 있어야 하지만 그렇게 하는 방법을 알고 있는 것처럼 들립니다.

언급한 바와 같이, 표준의 모든 부분을 동일하게 구현하기 위해 서로 다른 CPU를 기대할 수는 없지만 반드시 그럴 필요는 없습니다.

IEEE 부동 소수점에서 ASCII로 변환하면 오류가 발생합니다.1990년대에는 좋은 논문이 있었습니다. 가이 스틸 그리고 달라붙을 것이다.있었다 나중에 더 빠르게 수행하기 위한 후속 조치 버거와 디비그(Dybvig).

다른 팁

본질적으로 "시스템 간에 바이너리 데이터를 원활하게 전송할 수 있습니까?"라고 묻고 있습니다.두 시스템이 동일한 형식에 동의하는 한 대답은 '예'입니다.어떤 CPU를 기대하는지 알고 있다면 해당 CPU의 IEEE 표준 준수 여부를 확인하세요. 그러면 제대로 작동할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top