Chức năng C sau đây là từ dự án fastapprox.Tại sao độ lệch số mũ của IEEE-754 được sử dụng trong mã C này là 126.94269504 thay vì 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;
}
Một số chuyên gia tại đây có thể giải thích lý do sai lệch số mũ được sử dụng trong mã trên là 126,94269504 thay vì 127? Có giá trị thiên vị chính xác hơn không?
biên dịch cảnh báo từ 'nổi y = vx.i '' có thể mất dữ liệu ". –
Tại sao không hỏi ai đó đã viết nó? Nó không thực sự là một câu hỏi mã hóa, nó là một câu hỏi về thuật toán, đúng không? – Dan
@Dan - Có, nhưng nhà phát triển C là những người có thể đọc mã C và họ thường quan tâm đến kiến thức cấp thấp như vậy. Theo googling của tôi, đã có rất nhiều dự án C sử dụng các hàm được triển khai trong fastapprox, vì vậy có thể câu trả lời cho câu hỏi này cũng hữu ích cho các nhà phát triển C. Một điều nữa để nói, tại sao lại hỏi tác giả cách duy nhất để trả lời câu hỏi? Ở đây, tôi có thể nhận được phản hồi nhanh hơn từ các chuyên gia khác nhau. – Astaroth