Następująca funkcja C pochodzi z projektu fastapprox.Dlaczego obciążenie wykładnicze IEEE-754 użyte w tym kodzie C wynosi 126.94269504 zamiast 127?
static inline float
fasterlog2 (float x)
{
union { float f; uint32_t i; } vx = { x };
float y = vx.i;
y *= 1.1920928955078125e-7f;
return y - 126.94269504f;
}
Czy niektórzy eksperci mogą tutaj wyjaśnić, dlaczego wykładnik potęgowania użyty w powyższym kodzie wynosi 126.94269504 zamiast 127? Czy jest to dokładniejsza wartość stronniczości?
Compiler ostrzeżenie od 'y = vx.i unosić ; '" możliwa utrata danych ". –
Dlaczego nie zapytać kogoś, kto to napisał? To naprawdę nie jest pytanie o kodowanie, to raczej pytanie o algorytm, prawda? – Dan
@Dan - Tak, ale programiści C to tacy, którzy potrafią czytać kod C i zazwyczaj dbają o tak niskopoziomową wiedzę. Zgodnie z moim badaniem w Google, było już dużo projektów C za pomocą funkcji zaimplementowanych w fastapprox, więc może odpowiedzi na to pytanie są również przydatne dla programistów C. Jeszcze jedno, aby powiedzieć, dlaczego pytanie autora jest jedynym sposobem uzyskania odpowiedzi na pytanie? Tutaj mogę uzyskać szybsze odpowiedzi od różnych ekspertów. – Astaroth