4

는 특히 i386을 다른 CPU 아키텍처, MIPS (다른 코어의 커플), 파워 (E300, E500)에 상호 교환을 사용하여 (올바른 바이트 코스의 순서에 따라 조정)가 OK 네트워크를 두 번 부동 소수점 값을 보내하는 것입니다. 매우 오래된 하드웨어는 없습니다.다른 cpu 아키텍처에서 두 배입니까?

gcc 4.2.1을 컴파일러로 사용하고 모든 아키텍처에 대해 -O를 사용합니다. (? 그 것이다)

가정으로는 IEEE-754 사방 표준은 아직 위키 말한다 같이

상기 IEEE 754-1985은 어떤 값의 부호화 및 검출로서 구현 (많은 변형을 허용 특정 예외 사항). IEEE 754-2008은이 중 많은 부분을 강화했지만 몇 가지 변형이 여전히 남아 있습니다 (특히 바이너리 형식의 경우).

NaN 또는 기타 특수한 것, 유효한 10 진수를 전달하려고하지 않았습니다.

+0

텍스트에 어떤 문제가 있습니까? –

+1

성능상의 이유로 텍스트가 표시되지 않는 경우 프로토콜 버퍼를 살펴보아야 할 수 있습니다. http://code.google.com/p/protobuf/ 이들은 엔디안 문제, 정렬 (C 데이터 구조 전송과 비교) 등등. 그들은 보낸 사람과받는 사람이 IEEE-754를 준수한다는 가정하에 부동 소수점 숫자를 사용합니다. – KeyserSoze

답변

2

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

물론 올바른 바이트 순서를 사용하여 바이트로 분해하고 다른 끝에 재조합 할 수 있어야합니다.하지만 어떻게해야하는지 알 것 같습니다.

으로는 동일 표준의 모든 단일 부분을 구현하기 위해 다른 CPU를 예상 할 수는 없지만 그 필요는 없습니다 지적했다.

IEEE 부동 소수점에서 ASCII로 변환하면 오류가 발생합니다. 1990 년에는 Guy SteeleWill Clinger으로 좋은 논문이 나왔습니다. Burger와 Dybvig의 later followup on doing it faster이있었습니다.

+0

"크로스 플랫폼 데이터베이스 파일"이라고 주장하는 SQLite의 소스를 확인했습니다. 기본적으로 double 인 REAL 데이터 유형에 대해서만 바이트 순서를 처리합니다. 내가 안전하게가는 것처럼 들린다. 감사 –

1

"본질적으로 시스템간에 이진 데이터를 전송할 수 있습니까?" 두 시스템이 동일한 형식에 동의하는 한 대답은 예입니다. 기대하는 CPU를 알고 있다면 IEEE 표준 준수 여부를 확인하면 비즈니스에 있어야합니다.

+1

그게 내 자신을 피하려고 정확히 무엇인지 확인하려면 ... :) –

+0

PowerPC는 IEEE와 유사하지만 Motorola Byte 주문 방식입니다. x86은 IEEE 표준이지만 인텔 바이트 주문입니다. – NoMoreZealots

관련 문제