Aucune mise en œuvre particulière n'est requise. La norme C++ n'en parle pas beaucoup. La norme C entre dans les détails du modèle conceptuel supposé pour les nombres à virgule flottante, avec un signe, un exposant, un significande dans une base quelconque. b
et ainsi de suite. Il est toutefois précisé qu'il s'agit d'une description et non d'une exigence de mise en œuvre (C11, note de bas de page 21) :
Le modèle à virgule flottante est destiné à clarifier la description de chaque caractéristique de la virgule flottante et n'exige pas que l'arithmétique en virgule flottante de l'implémentation soit identique.
Cela dit, bien que les détails puissent varier, il me semble, du moins au premier abord, que produire (par exemple) une implémentation conforme de double
qui ne correspondait pas assez avec le modèle habituel (c'est-à-dire un significande et un exposant) serait difficile (ou du moins difficile à faire avec des performances compétitives, de toute façon). Il ne serait cependant pas particulièrement difficile de le faire varier d'autres façons, par exemple en réorganisant l'ordre ou en utilisant une base différente.
La définition de std::numeric_limits<T>::digits
(et std::numeric_limits<T>::digits10
) impliquent assez directement que ce qui est répertorié comme un type de virgule flottante doit conserver (au moins approximativement) la même précision pour tous les nombres dans une gamme assez large de magnitudes. La façon la plus évidente d'y parvenir est d'avoir un certain nombre de bits/chiffres consacrés à un significande et un autre ensemble (séparé) de bits consacrés à un exposant.