Mục tiêu của tôi là chạy mô phỏng yêu cầu các số không tách rời trên các máy khác nhau có thể có kiến trúc và hệ điều hành CPU khác nhau. Ưu tiên chính là cho cùng trạng thái ban đầu, mỗi máy nên tái tạo mô phỏng chính xác như nhau. Ưu tiên thứ hai là tôi muốn các phép tính có hiệu suất và độ chính xác gần như có thể thực hiện với các phao chính xác kép.Cách hiệu quả nhất để chạy mô phỏng đa nền tảng, xác định trong Haskell là gì?
Theo như tôi có thể nói, đó dường như không có cách nào để ảnh hưởng đến định mệnh của nổi tính toán điểm từ bên trong một chương trình Haskell, tương tự như _controlfp
và _FPU_SETCW
macro trong C. Vì vậy, tại thời điểm này tôi xem xét lựa chọn của tôi là
- Sử dụng Data.Ratio
- Sử dụng Data.Fixed
- Sử dụng Data.Fixed.Binary từ gói fixed-point
- Viết mô-đun để gọi
_ controlfp
(hoặc tương đương cho mỗi nền tảng) qua FFI. - Có thể có điều gì đó khác?
Một vấn đề với thư viện số học điểm cố định là chúng không có, ví dụ: hàm lượng giác hoặc logarit được định nghĩa cho chúng (vì chúng không thực hiện loại lớp Floating
) vì vậy tôi đoán tôi sẽ cần cung cấp bảng tra cứu cho tất cả các hàm trong dữ liệu hạt giống mô phỏng. Hay là có cách nào tốt hơn?
Cả hai thư viện điểm cố định cũng ẩn các nhà xây dựng newtype
, vì vậy bất kỳ (de-) serialization sẽ cần phải được thực hiện thông qua toRational
/fromRational
theo như tôi có thể nói, và cảm thấy như nó sẽ thêm chi phí không cần thiết.
Bước tiếp theo của tôi là đánh giá các giải pháp điểm cố định khác nhau để xem hiệu suất thế giới thực, nhưng trong khi đó, tôi sẵn sàng đưa ra lời khuyên bạn có về chủ đề này.
Nền tảng có thể đa dạng như thế nào?Trên mọi thứ hợp lý, bạn nên sử dụng 'Double', sử dụng' -msse2' trên nền tảng 32 bit (theo mặc định trên 64 bit). –
Daniel Fischer: Tôi không cần phải hỗ trợ bất kỳ nền tảng bí truyền nào, nhưng khác nhau (hiện đại) hương vị của Windows, Linux và MacOSX trong cả 32-bit và 64-bit. Đọc [trang này] (http://gafferongames.com/networking-for-game-programmers/floating-point-determinism/) đã để lại cho tôi khái niệm chỉ dựa vào hướng dẫn sse2 có thể không đủ trong thế giới thực (tm)) và việc sử dụng số học điểm cố định có thể ít đau đớn hơn nhiều. – shang