Trong bản cập nhật mới nhất của API Android FloatMath
được đánh dấu bằng các lint-cảnh báo sau đây:Sử dụng FloatMath hoặc Math và một diễn viên?
Trong các phiên bản Android cũ hơn, sử dụng android.util.FloatMath là khuyến khích cho lý do hiệu suất khi hoạt động trên phao nổi. Tuy nhiên, trên đôi phần cứng hiện đại cũng nhanh như phao (mặc dù chúng mất bộ nhớ), và trong các phiên bản gần đây của Android, FloatMath thực sự là chậm hơn sử dụng java.lang.Math do cách JIT tối ưu hóa java .lang.Math. Do đó, bạn nên sử dụng Toán thay vì FloatMath nếu bạn chỉ nhắm mục tiêu Froyo trở lên.
Nó cũng được đề cập đến here đôi và phao bằng tốc độ trên phần cứng gần đây.
Tôi đang sử dụng một số phép lượng giác trong một ứng dụng tôi hiện đang làm việc (nhắm mục tiêu Froyo và ở trên), nhưng độ chính xác cao là không cần thiết, vì vậy tôi đã sử dụng phao và FloatMath
cho đến nay, và không cần bất cứ điều gì chuyển sang tăng gấp đôi.
Tuy nhiên, "sử dụng Math
trên FloatMath
" -khuyến nghị không cho biết nên sử dụng cái nào nếu phao là kết quả mong muốn.
Vì vậy, trong ngắn hạn; cái nào là thích hợp hơn?
float foo = FloatMath.sin(bar);
hoặc
float foo = (float) Math.sin(bar);
Trên một mặt lưu ý, tôi chỉ có một Froyo-thiết bị, vì vậy tôi thực sự không thể làm bất cứ điểm chuẩn thích hợp trên của riêng tôi.
Ở cấp API 22 lớp FloatMath đã không còn được ưu tiên cho lớp Math thông thường.
Tôi nghĩ rằng văn bản bạn trích dẫn có nghĩa là nếu float là kết quả mong muốn, bạn nên sử dụng toán học thay vì floatmath và cast. –
Tôi lấy bất kỳ yêu cầu nào về hiệu suất tương đối của 'int' /' float'/'double' với một lượng muối rất lớn. 'float' có thể hơi nhanh hơn đơn giản chỉ vì dấu chân bộ nhớ cache nhỏ hơn và trên iPhone 3GS,' float' là * đáng kể * nhanh hơn vì nó có thể sử dụng đơn vị NEON thay vì đơn vị VFP chậm hơn (đơn vị NEON không hỗ trợ tăng gấp đôi); điều này có thể là iDevice cụ thể. Ngoài ra, một JIT tự động vector hóa sẽ tự động được hưởng lợi 'float' nhiều hơn' double' đơn giản bởi vì nó có thể phù hợp hơn với chúng trong mỗi thanh ghi vector. –
Có thể nào các phao nổi được lưu trữ trên các thiết bị Android mới nhất? – Philip