Học kỳ trước, chúng tôi phải phát triển một raytracer cho một khóa học ở trường. Trường học được thực hiện, tôi đã cố gắng để fiddle một chút với nó.Java raytracing float vs đôi
Tôi muốn xem điều gì sẽ thay đổi nếu tôi thay đổi tất cả các phép tính điểm động từ kép sang phao (tất cả các tính toán được thực hiện với tăng gấp đôi). Vì vậy, tôi đã thay đổi mọi biến để gõ float, và chỉ cần cast mỗi double được trả về từ các phương thức Math để float. Kiểm tra raytracer của tôi trên một vài cảnh cho thấy một sự gia tăng hiệu suất khá tốt.
Tìm kiếm trên web Tôi tìm thấy nhiều lý do khiến float có thể nhanh hơn, nhưng cũng có một số người cho rằng tốc độ tăng gấp đôi có thể nhanh hoặc thậm chí nhanh hơn trong môi trường 64 bit. Vấn đề là, tôi đang chạy trong một môi trường 64-bit và JVM. Điều gì sẽ là lý do cho hiệu suất tăng lên này?
Bây giờ, tôi đang đọc cuốn sách PBRT và lập kế hoạch để viết lại một raytracer từ đầu sau này. Sẽ chọn nổi cho tất cả các tính toán điểm nổi đặt ra bất kỳ vấn đề? Tôi đã không nhận thấy bất kỳ trong các thử nghiệm của tôi, nhưng có lẽ cho những cảnh nhất định độ chính xác thấp hơn có thể (kiểm tra giao lộ có vẻ như nơi nó có thể đặt ra một vấn đề có thể)? Hoặc có lẽ một sự cân bằng, như sử dụng gấp đôi cho các xét nghiệm quan trọng và nổi cho các tính toán ít quan trọng? Tôi sẽ phải sử dụng một thư viện Math khác để loại bỏ việc đúc, tôi sẽ đi theo con đường nổi.
Tôi tin rằng 'double d = 1d' là hai hướng dẫn, trong khi' float f = 1f' là một. Ngay cả trên các máy 64 bit. Lộn xộn xung quanh với một JVM 64bit. – jn1kk
"Tôi đang chạy trong môi trường 64 bit" Hệ điều hành 64 bit không được tính là môi trường 64 bit. Trình biên dịch của bạn và các công cụ khác (chẳng hạn như một JVM nếu bạn đang làm Java) cũng phải là 64-bit. –
bản sao có thể có của [Là phao chậm hơn gấp đôi? Chương trình 64 bit có chạy nhanh hơn chương trình 32 bit không?] (Http://stackoverflow.com/questions/5738448/is-float-slower-than-double-does-64-bit-program-run-faster-than-32 -bit-program) –