Tôi có một số câu hỏi về cách đặt f
bên cạnh giá trị theo nghĩa đen. Tôi biết nó định nghĩa nó như là một float
nhưng tôi thực sự cần nó? Đây có phải là 2.0f * 2.0f
bất kỳ nhanh hơn hoặc được biên dịch nào khác với 2.0 * 2.0
không? Tuyên bố có giống như float a = 2.0;
được biên dịch khác với float a = 2.0f;
không?Sự khác biệt giữa 2.0 và 2.0f (dấu phẩy rõ ràng so với hai chữ số)
Trả lời
Đôi khi bạn cần nó để có rõ ràng loại float
, như trong trường hợp sau đây
float f = ...;
float r = std::max(f, 42.0); // won't work; (float, double).
float r = std::max(f, 42.0f); // works: both have same type
Tôi hiếm khi về tốc độ (ít nhất là trực tiếp), nhưng thực tế là nếu không trình biên dịch sẽ cảnh báo về việc chuyển đổi double
thành float
.
Ok nhưng trên một ví dụ * 2.0 là thực sự sử dụng nhân đôi? –
Về lý thuyết, tôi tin rằng sẽ dẫn đến nhân hai 'double', chuyển đổi kết quả thành' float'. Trong thực tế, với nó là 2.0, rất có thể là trình biên dịch có thể/sẽ tìm ra rằng nó có thể sử dụng 'float' trong suốt. OTOH, có những giới hạn bắt buộc về tối ưu hóa toán học FP (đặc biệt là trong C99), do đó, làm cho nó rõ ràng có thể giúp đỡ. –
vâng tôi chỉ sử dụng 2.0 làm ví dụ. Cảm ơn đã giúp đỡ. –
AFAIK, trên máy tính "bình thường" (x86 với x87 -like coprocessor toán học) sự khác biệt về tốc độ là không thích hợp, vì các tính toán được thực hiện trong nội bộ ở độ chính xác 80 bit. Nổi có thể đạt được tầm quan trọng khi bạn có số lượng lớn các số dấu phẩy động để quản lý (các tính toán khoa học hoặc các thứ tương tự), do đó, có kiểu dữ liệu nhỏ hơn có thể thuận tiện, cả hai đều sử dụng ít bộ nhớ hơn và đọc nhanh hơn chúng từ RAM/đĩa. Cũng có thể hữu ích khi sử dụng phao thay vì tăng gấp đôi trên các máy thiếu đơn vị dấu chấm động (ví dụ: hầu hết các vi điều khiển), trong đó tất cả số học dấu phẩy động được thực hiện bằng phần mềm bằng mã được trình biên dịch chèn vào; trong trường hợp này, có thể đạt được tốc độ hoạt động trên phao nổi (và trong môi trường như vậy thường cũng có mọi vấn đề bộ nhớ). Trên PC, IMO bạn chỉ có thể sử dụng gấp đôi trong các ngữ cảnh "bình thường", chỉ cần tránh trộn các kiểu dữ liệu (double, float, ints, ...) trong cùng biểu thức để tránh các chuyển đổi tốn kém không cần thiết. Nhưng dù sao, với các bản văn, trình biên dịch phải đủ thông minh để thực hiện chuyển đổi tại thời gian biên dịch.
Đúng, tôi đang sử dụng iphone. –
Vì những gì tôi đã đọc, bộ xử lý iPhone là ARM1176 với FPU tùy chọn được cung cấp (xem tại đây: http://www.arm.com/products/processors/technologies/vector-floating-point.php); Tôi không có chuyên gia về nó, nhưng tôi không nghĩ rằng tốc độ thay đổi rất nhiều với nổi/tăng gấp đôi trong trường hợp này. Mối quan tâm duy nhất của tôi là nó có "16 độ chính xác gấp đôi hoặc 32 thanh ghi chính xác duy nhất", vì vậy chỉ sử dụng phao bạn có thể nhận được thứ gì đó từ thanh ghi bổ sung, nhưng nó cũng phụ thuộc vào cách môi trường được thiết lập. –
Vâng tôi biết bạn có thể nhưng trên iphone đôi chắc chắn là chậm hơn sau đó trôi nổi. –
- 1. sự khác biệt giữa stringstream rõ ràng và str
- 2. Sự khác biệt giữa session.evict vs rõ ràng
- 3. SQL: Sự khác biệt giữa "GIỮA" so với "current_date - số"
- 4. Sự rõ ràng về sự khác biệt giữa "LexicalEnvironment" và "VariableEnvironment" trong ECMAScript/JavaScript
- 5. Sự khác biệt giữa việc gán rõ ràng và tiềm ẩn trong C++
- 6. Sự khác biệt giữa việc triển khai ngầm định và rõ ràng các giao diện C#
- 7. Tính khác biệt rõ ràng về màu giữa hai giá trị màu HSI
- 8. phát hiện sự khác biệt giữa hai chuỗi với Javascript
- 9. Sự khác biệt giữa Firebase AngularFire ngầm và đồng bộ rõ ràng
- 10. Sự khác biệt giữa giá trị và ràng buộc
- 11. Sự khác biệt giữa = và: =
- 12. ASP.NET MVC 2.0 - Sự khác biệt giữa RenderPartial và RenderAction
- 13. Sự khác biệt giữa con trỏ rõ ràng và tiềm ẩn trong Oracle là gì?
- 14. Sự khác biệt số nguyên trong python giữa hai ngày
- 15. Sự khác biệt giữa giao diện người dùng và nối thêm dấu hai chấm (: mục so với mặt hàng :)
- 16. Sự khác biệt giữa Sproutcore và Ember
- 17. Sự khác biệt giữa hai bản đồ
- 18. Sự khác biệt giữa Fragment Và FragmentActivity
- 19. Sự khác biệt giữa ServiceProcessInstaller và ServiceInstaller
- 20. Sự khác biệt rõ ràng giữa các ý định fortran (trong, ngoài, inout) là gì?
- 21. Sự khác biệt giữa $ (...) và `...`
- 22. Sự khác biệt giữa Thuộc tính Canvas và Lề số
- 23. Sự khác biệt giữa get.chomp() so với STDIN.gets.chomp() là gì?
- 24. So sánh hai danh sách và trả lại giá trị khác biệt và sự khác biệt
- 25. Sự khác biệt giữa $ HOME và '~' (dấu ngã)?
- 26. Sự khác biệt giữa add và addu
- 27. Sự khác biệt giữa hai NSDates
- 28. iPhone: Sự khác biệt giữa nil so với Nil và true so với TRUE
- 29. Sự khác biệt giữa "**/* /" và "** /"?
- 30. So sánh hai chuỗi và nhận được sự khác biệt
Bạn có nghĩa là "giá trị chữ", không phải "tên biến". '2.0' là giá trị' double'. '2.0f' là một giá trị' float'. '2' là giá trị' int'. Không có biến nào trong số này là các biến. – RBerteig
@RBerteig xấu của tôi :) –
xin lỗi, không có nghĩa là âm thanh như tôi đã ranting có ... Tôi có lẽ nên có chỉ cần chỉnh sửa cơ thể âm thầm. – RBerteig