Existe una expresión constante correcta, en términos de flotante, para su msb?

El problema: dada una expresión constante de coma flotante, ¿podemos escribir una macro que se evalúe como una expresión constante cuyo valor sea una potencia de dos igual al lugar más significativo del significado? De manera equivalente, esta es solo la mayor potencia de dos menor o igual a la entrada en magnitud.

Para los fines de esta pregunta podemos ignorar:

Valores de casi desbordamiento o casi desbordamiento (pueden manejarse con muchas aplicaciones de?: para reescalar). Entradas negativas (se pueden manejar de la misma manera). Implementaciones que no cumplen con el Anexo F (realmente no pueden hacer nada útil en coma flotante con ellas). Rareza en torno al exceso de precisión float_t ydouble_t se puede usar conFLT_EVAL_METHOD y otrafloat.h macros para manejarlo de forma segura).

e modo que es suficiente resolver el problema para valores positivos limitados desde el infinito y el rango denormal.

enga en cuenta que este problema es equivalente a encontrar el "épsilon" para un valor específico, es decir,nextafter(x,INF)-x (o el equivalente enfloat olong double), con el resultado escalado porDBL_EPSILON (o equivalente para el tipo). Soluciones que encuentran que son perfectamente aceptables si son más simples.

Tengo una solución propuesta que publico como respuesta propia, pero no estoy seguro de si es correcta.

Respuestas a la pregunta(3)

Su respuesta a la pregunta