Mình không phải lập trình viên C code, nhưng cần convert 1 số đoạn c code. Nhưng không hiểu đoạn mã bên dưới. Nó là hàm nhập vào giá trị p và tính gần đúng 2^p .ví dụ 2^3 = 8.000244
Mình đã đọc định nghĩa union và hiểu được nó là kiểu dữ liệu tự định nghĩa và cho phép chứa nhiều kiểu dữ liệu khác nhau, khá giống struct nhưng khác ở chỗ struct lưu trữ dữ liệu trên nhiều vùng nhớ còn union chỉ lưu trữ dữ liệu trên 1 vùng nhớ.
Như vậy biến union var bên dưới có sizeof = 4 chứa 2 kiểu dữ liệu unsigned int và float.
Giả sử mình chạy fastpow2(3.0) thì mình không hiểu var.f lấy dữ liệu kiểu gì , cách nào mà nó ra được 8.000244
float fastpow2 (float p)
{
float offset = (p < 0) ? 1.0f : 0.0f;
float clipp = (p < -126) ? -126.0f : p;
int w = clipp;
float z = clipp - (int)clipp + offset;
union { unsigned int i; float f; } var = { (unsigned int) ( (1 << 23) * (clipp + 121.2740838f + 27.7280233f / (4.84252568f - z) - 1.49012907f * z) ) };
return var.f;
}