Double (s) в разных архитектурах процессора? - PullRequest
4 голосов
/ 07 августа 2009

Можно ли отправлять по сети двойные значения с плавающей запятой (конечно, с поправкой на правильный порядок байтов) и использовать их взаимозаменяемо на разных архитектурах процессора, в частности, i386, mips (пара разных ядер), powerpc (e300, e500). Нет очень старого оборудования.

Использование gcc 4.2.1 в качестве компилятора с -Os для всех архитектур.

Предположительно, это везде стандарт IEEE-754 (не так ли?), Но, как гласит Википедия:

IEEE 754-1985 допускал множество вариантов реализации (например, кодирование некоторых значений и обнаружение определенных исключений). IEEE 754-2008 ужесточил многие из них, но некоторые варианты все еще остаются (особенно для двоичных форматов).

Я не собирался обменивать NaNs или другие специальные вещи, только действительные десятичные числа.

Ответы [ 2 ]

2 голосов
/ 07 августа 2009

Если вы хотите отправить представления нормализованных чисел, вы абсолютно безопасны для любой современной архитектуры. В случае каких-либо сомнений, проверьте руководство по архитектуре. Для денормализованных номеров вы должны проверить.

Конечно, вы должны быть в состоянии разбиться на байты и собрать на другом конце, используя правильный порядок байтов, но, похоже, вы знаете, как это сделать.

Как уже отмечалось, нельзя ожидать, что разные процессоры будут реализовывать каждую часть стандарта одинаково, но это не обязательно.

Преобразование из плавающей запятой IEEE в ASCII чревато ошибкой; в 1990-е годы были хорошие статьи Гая Стила и Уилла Клингера . * * * * * * * * * * * * * * - * * * * * * * * * * * * * * * * * * - * * * * * * * * * * * * * * * * * * * * *.

1 голос
/ 07 августа 2009

По сути, вы спрашиваете: «Могу ли я без проблем передавать двоичные данные между системами». Ответ будет «Да», если обе системы согласуются в одном формате. Если вы знаете, какой процессор вы ожидаете, то проверьте его соответствие стандартам IEEE, и вы должны быть в бизнесе.

...