2013-03-14 21 views
5

Tôi có nên viết các giá trị CGFloat với postfix f hay không?Có sự khác biệt về hiệu suất sử dụng CGFloat có hoặc không có postfix .f trong Mục tiêu-C

CGFloat fValue = 1.2; 

vs

CGFloat fValue = 1.2f; 

Tôi biết rằng postfix này xác định một giá trị float. Nhưng điều đó có cần thiết không, có sự khác biệt về hiệu suất nào giữa việc sử dụng hai hoặc chỉ là bản trình bày trực quan để bạn có thể nhanh chóng xác định loại giá trị (ví dụ: nổi trong trường hợp này) không?

+1

http://stackoverflow.com/questions/2391818/f-after-number-float-in-objective-cc – iphonic

+1

http://stackoverflow.com/questions/14302898/is-it-better-to-write 0-0-0-0f-or-0f-thay-cho-đơn giản-0-cho-được-ph-hoặc/14302912 # 14302912 –

Trả lời

6

1.2 là double; tức là số điểm nổi chính xác gấp đôi 64 bit.

1.2f là float; tức là số điểm nổi chính xác một lần 32 bit.

Xét về hiệu suất, không quan trọng vì trình biên dịch sẽ chuyển đổi các chữ cái từ float thành doubledouble thành float nếu cần. Tuy nhiên, khi gán các số dấu phẩy động từ các hàm, bạn sẽ cần phải bỏ qua để tránh cảnh báo trình biên dịch.

+0

Cũng không quan trọng vì tôi nghi ngờ nó đang gây ra bất kỳ lần truy cập hiệu suất có thể đo lường nào nếu nó không được chuyển đổi bởi trình biên dịch. Đánh giá theo từ ngữ, nó hét lên tối ưu hóa sớm. – borrrden

+0

Vì vậy nên sử dụng postfix nếu tôi đang hoạt động với các giá trị float và bỏ qua nó nếu sử dụng gấp đôi. Sau khi tất cả các trình biên dịch có một số công việc phụ để làm gì nếu tôi bỏ qua postfix cho các giá trị float. Nhưng ngày nay nó sẽ không có sự khác biệt về hiệu suất. –

+1

@BorutTomazin Tôi sẽ không lo lắng gì cả; Tôi đã nhìn thấy nhiều ví dụ nơi các số nguyên nguyên được cung cấp và điều này cũng hoạt động tốt. Với số lượng công việc mà trình biên dịch thực hiện để tạo tệp đối tượng của bạn, đây là một * thả xuống đại dương *. – trojanfoe

0

Sự khác biệt cơ bản là như sau:

1.0 hoặc 1. là một đôi liên tục

1.0f là một phao liên tục

Nếu không có một hậu tố, một chữ số thập phân với một trong đó (123,0) sẽ được coi là số dấu phẩy động kép chính xác.

Nếu bạn gán hoặc chuyển cho một biến hoặc tham số đơn chính xác, trình biên dịch sẽ (nên) đưa ra cảnh báo. Phụ thêm f cho trình biên dịch biết rằng bạn muốn chữ được coi là một số dấu phẩy động chính xác đơn.

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