Câu hỏi của bạn có thể có một số cách giải thích.
Nếu nó chỉ dành cho góc và lưu trữ trên đĩa hoặc trên thiết bị, tôi khuyên bạn nên lưu trữ giá trị của mình bằng kỹ thuật hoàn toàn khác: lưu trữ dưới dạng số nguyên 32 bit.
int encodedAngle = (int)(value * (0x7FFFFFFF/180.0));
Để khôi phục, ngược lại.
double angle = (encodedAngle/(0x7FFFFFFF/180.0));
Bằng cách này, bạn có độ phân giải 31 bit đầy đủ cho 180 độ và 1 bit cho dấu.
Bạn có thể sử dụng cách này để giữ giá trị của bạn trong ram, chi phí của lớp phủ này cao hơn so với làm việc trực tiếp với đôi, nhưng nếu bạn muốn giữ bộ nhớ của bạn thấp nhưng độ phân giải cao này có thể hoạt động khá tốt. Chi phí không quá cao, chỉ một chuyển đổi từ/đến số nguyên và/hoặc nhân đôi, bộ vi xử lý hiện đại sẽ làm điều đó trong một khoảng thời gian rất ngắn, và do bộ nhớ truy cập ít hơn, nếu danh sách chứa nhiều của các giá trị, mã của bạn sẽ thân thiện hơn với bộ nhớ cache của bộ xử lý.
độ phân giải của bạn sẽ 180/((2^31) - 1) = 8.38190318 × 10^-8
độ, không xấu :)
Nguồn
2011-10-28 20:49:50
Độ dài thay đổi từ -180 đến 180 và vĩ độ từ -90 đến 90. – caf
Điểm tốt, bị bệnh đúng. – Robert