xiste uma expressão constante correta, em termos de float, para o seu ms
O problema: dada uma expressão constante de ponto flutuante, podemos escrever uma macro que avalie uma expressão constante cujo valor é uma potência de dois igual ao local mais significativo do significando? Equivalentemente, essa é apenas a maior potência de dois menor ou igual à entrada em magnitud
Para os fins desta pergunta, podemos ignorar:
Valores de quase estouro ou quase estouro (eles podem ser tratados com muitas aplicações finitas de?:
para redimensionar).ntradas negativas (elas podem ser tratadas da mesma formamplementações que não estão em conformidade com o Anexo F (não podem realmente fazer nada útil em ponto flutuante com elas Estranho em torno do excesso de precisão float_t
edouble_t
pode ser usado comFLT_EVAL_METHOD
e outrofloat.h
acros para lidar com isso com segurançaPortanto, basta resolver o problema para valores positivos limitados ao infinito e à faixa desnorma
Observe que esse problema é equivalente a encontrar o "epsilon" para um valor específico, ou seja,nextafter(x,INF)-x
(ou o equivalente emfloat
oulong double
), com o resultado redimensionado porDBL_EPSILON
(ou equivalente para o tipo). Soluções que consideram perfeitamente aceitáveis se forem mais simple
Tenho uma solução proposta que estou postando como resposta automática, mas não tenho certeza se está corret