6

Sur certains systèmes, le double est identique au double long. Comment puis-je détecter si le double long est plus précis que doubler au moment de la compilation et l'utiliser pour la compilation conditionnelle.comment détecter si le double long est de précision prolongée ou non au moment de la compilation

Je vois qu'il ya des macros prédéfinies présentes dans libgcc SIZEOF_DOUBLE et SIZEOF_LONG_DOUBLE Mais il n'y a pas entre les différents portables toolchains.

Y a-t-il un moyen de le faire?

+0

Vous pouvez essayer 'sizeof (double)> 8'. Bien que non portable, il fonctionnera probablement dans la plupart des cas. – Mysticial

+0

Ne pouvez-vous pas tester 'sizeof (double)

+2

Le préprocesseur ne reconnaît pas 'sizeof'. –

Répondre

5

Vous pouvez comparer DBL_MANT_DIG et LDBL_MANT_DIG de float.h.

1

Vous pouvez tester par ex.

#if DBL_MANT_DIG < LDBL_MANT_DIG 

ou des valeurs similaires définies dans float.h

0

La « bonne » solution à ce problème (comme utilisé par de nombreux projets) est de créer un script de configuration.

Le script configure exécute divers tests qui incluent la compilation et l'exécution de petits programmes pour déterminer les propriétés du compilateur et du système. Le script écrit ensuite ses résultats en tant que fichier d'en-tête, ou fichier makefile, ou les deux. Bien sûr, le vôtre peut faire ce que vous voulez.

Il existe des outils pour faire ce genre de choses semi-automatiquement, mais ils sont probablement trop exigeants pour vous. Si vous souhaitez jeter un oeil les noms sont autoconf et automake. Attention, ils ne sont pas simples à apprendre, mais ils génèrent des scripts de configuration et des makefiles qui devraient fonctionner sur n'importe quelle plate-forme tant qu'elle a un shell de type unix, et GNU make.

Questions connexes