¿Por qué no se pueden comparar los tipos de coma flotante utilizando la función memcmp ()?

bool floatcmp(const float a, const float b)
{
    const void *p = (void*)&a;
    const void *q = (void*)&b;
    if (memcmp(p, q, sizeof(float)) == 0)
        return true;
    return false;
}

El código de ejemplo está arriba, la página del manual dicememcmp(x,y)==0 no implica quex==y y los tipos de coma flotante a menudo tienen un valor llamado NaN ("no un número") con la propiedad de que NaN == NaN es falso. Pero cambio el tipo a void * y creo que el compilador no lo sabea es un número flotante

Respuestas a la pregunta(2)

Su respuesta a la pregunta