В C99 вы можете просто проверить, определен ли символ препроцессора __STDC_IEC_559__
. Если это так, то вам гарантировано, что double
будет 8-байтовым значением, представленным в формате IEEE 754 (также известный как МЭК 60559). См. Стандарт C99, Приложение F. Однако я не уверен, доступен ли этот символ в C ++.
#ifndef __STDC_IEC_559__
#error "Requires IEEE 754 floating point!"
#endif
Кроме того, вы можете проверить предопределенные константы __DBL_DIG__
(должно быть 15), __DBL_MANT_DIG__
(должно быть 53), __DBL_MAX_10_EXP__
(должно быть 308), __DBL_MAX_EXP__
(должно быть 1024), __DBL_MIN_10_EXP
(должно быть -307) и __DBL_MIN_EXP__
(должно быть -1021). Они должны быть доступны во всех версиях C и C ++.