2011-10-21 27 views

Trả lời

21

Một phao 32 bit chứa 7 chữ số chính xác, đôi 64 bit chứa 15 chữ số chính xác.

Với 7 chữ số chính xác, kinh độ tối đa 179,9999 chỉ chính xác xuống còn 0,0001 độ. Một mức độ là khoảng 60 hải lý để 0,0001 độ là khoảng 10 mét (33 feet). Nếu bạn muốn lưu trữ các giá trị vĩ độ/vĩ độ chính xác hơn, thì bạn cần phải sử dụng một số nguyên kép (hoặc một số nguyên cố định).

3

Những ngày này không quan trọng lắm.

Một đôi chỉ là một khe giá trị nổi có thể giữ độ chính xác gấp hai lần như một phao tiêu chuẩn. Trừ khi bạn buộc nó sử dụng một phao, trình biên dịch Objective-c sẽ thực sự lưu trữ tất cả các giá trị float dưới dạng double.

Nổi và tăng gấp đôi chủ yếu là giữ nguyên từ những ngày cũ khi bộ nhớ siêu chặt. Những ngày này, bạn thường chỉ thấy chúng khác nhau khi nói đến định dạng chuỗi. Nó giống với các kích cỡ khác nhau của int. Tất cả các kích cỡ được lưu trữ trong kích thước lớn nhất có sẵn, trừ khi bạn buộc trình biên dịch để làm khác.

2

Đối với trả lời đó chính xác bạn có khi sử dụng phao hoặc gấp đôi tôi đã đưa ra câu trả lời này:

chính xác Trường hợp xấu nhất khi lưu trữ số như số thập phân cho E/W và N/S:

  • phao: 1.6955566 mét
  • đôi: 3.1582203519064933E-9 mét. (Tức là 3 nm)

Bạn có thể làm các tính toán cho mình bằng cách chạy này trong Java:

public class Main { 
    public static void main(String[] args) { 
    System.out.println(Math.ulp((float) 180) * 60 * 1852); 
    System.out.println(Math.ulp((double) 180) * 60 * 1852); 
    } 
} 

Tôi biết đây là một chủ đề cũ nhưng tôi tìm thấy nó trong khi tìm kiếm các vấn đề. Float có lẽ là đủ cho hầu hết các ứng dụng. GPS của thiết bị Apple được đề cập có lẽ không có độ chính xác cao hơn. Nhưng nó dễ dàng hơn để lưu trữ gấp đôi miễn là dữ liệu không phải là một mối quan tâm.

+0

Tôi chỉ nhận ra rằng tôi cũng cần phải thực hiện pythagoras với lỗi lớn nhất trong hướng khác nữa. Vì vậy, một chút tồi tệ hơn. :) – Gussoh

Các vấn đề liên quan