4

Est-il possible d'envoyer des valeurs à virgule flottante double réseau (ajustées pour l'ordre correct des octets bien sûr) et de les utiliser de manière interchangeable sur différentes architectures de processeur, en particulier i386, mips (deux cœurs différents), powerpc (e300, e500). Pas de matériel extrêmement ancien.Double (s) à travers différentes architectures de CPU?

Utilisation de gcc 4.2.1 comme compilateur avec -Os pour toutes les architectures.

Soi-disant il est IEEE-754 norme partout (est?), Mais comme wikipedia dit:

L'IEEE 754-1985 permis à de nombreuses variations dans les implémentations (telles que le codage de certaines valeurs et la détection de certaines exceptions). IEEE 754-2008 en a resserré beaucoup, mais il reste encore quelques variantes (en particulier pour les formats binaires).

Je n'ai pas l'intention de passer autour de NaNs ou d'autres choses spéciales, juste des nombres décimaux valides.

+0

Quel est le problème avec le texte? –

+1

Si vous évitez le texte pour des raisons de performances, vous pouvez consulter les tampons de protocole: http://code.google.com/p/protobuf/ Ils traitent les problèmes endian, l'alignement (par opposition à l'envoi d'une structure de données C) , etc. Ils utilisent des nombres à virgule flottante, en supposant que l'expéditeur et le destinataire sont conformes à la norme IEEE-754. – KeyserSoze

Répondre

2

Si vous souhaitez envoyer des représentations de nombres normalisés, vous êtes totalement en sécurité sur n'importe quelle architecture moderne. En cas de doute, consultez le manuel d'architecture. Pour les nombres dénormalisés, vous devrez vérifier.

Bien sûr, vous devez être en mesure de dissembler en octets et de réassembler à l'autre extrémité, en utilisant l'ordre correct des octets, mais il semble que vous sachiez comment faire cela. Comme indiqué précédemment, vous ne pouvez pas vous attendre à ce que des processeurs différents implémentent de manière identique chaque partie de la norme, mais ce n'est pas nécessaire.

La conversion d'un point flottant IEEE en ASCII est lourde d'erreur; il y avait de bons papiers dans les années 1990 par Guy Steele et Will Clinger. Il y avait un later followup on doing it faster par Burger et Dybvig.

+0

Juste vérifié la source de SQLite, qui prétend "fichier de base de données multiplateforme" - il se soucie seulement de l'ordre des octets pour son type de données REAL qui est essentiellement un double. On dirait que je suis sûr d'y aller. Merci –

1

Vous demandez essentiellement "Puis-je transférer des données binaires entre les systèmes de façon transparente". La réponse serait Oui, tant que les deux systèmes acceptent le même format. Si vous connaissez la CPU que vous attendez, vérifiez leur conformité aux normes IEEE et vous devriez être en affaires.

+1

Pour vérifier que c'est exactement ce que je veux éviter de faire moi-même ... :) –

+0

PowerPC sera compatible IEEE, mais c'est une commande de Motorolla Byte, où le x86 est conforme IEEE mais commande Intel Byte. – NoMoreZealots

Questions connexes