Có rất nhiều thách thức kỹ thuật khiến cho khả năng tái tạo bit-bit-bit chính xác của các kết quả tính toán cực kỳ khó đạt được.
Ở cấp độ phần mềm, các thay đổi đối với mã hoặc bất kỳ thư viện nào được sử dụng bởi mã rõ ràng có thể gây ra các kết quả khác nhau được tạo ra. Bạn sẽ ngạc nhiên bởi số lượng thư viện hỗ trợ cuối cùng có thể được liên kết thành một mã khoa học điển hình.
Ở cấp độ thấp hơn, biên dịch lại bất kỳ mã nào hoặc bất kỳ thư viện nào được sử dụng bởi mã với trình biên dịch mới hoặc với các tối ưu hóa trình biên dịch khác nhau được bật cũng có thể gây ra sự cố. Một lý do là các hoạt động khác nhau trong mã có thể được thực hiện theo một thứ tự khác khi mã được biên dịch lại. Vì phép cộng dấu phẩy động không liên kết (a + b) + c <> a + (b + c), điều này có thể cho kết quả khác nhau.
OK, vậy nếu chúng ta bảo vệ toàn bộ môi trường phần mềm (HĐH, thư viện và mã được biên dịch) bằng cách (ví dụ) ghi nó vào đĩa CD-Rom có thể khởi động sẽ chạy mã. Bây giờ chúng ta có thể chắc chắn rằng chúng ta sẽ nhận được kết quả tương tự nếu chúng ta chạy mã này trên một máy tính khác không?
Đáng ngạc nhiên, một số mã thực sự thay đổi thứ tự tính toán dựa trên các khía cạnh của mô hình bộ xử lý cụ thể mà chúng đang chạy. Ví dụ, các thư viện đại số tuyến tính được tối ưu hóa thường phá vỡ các phép nhân ma trận để làm việc trên các khối sẽ phù hợp với bộ đệm. Khi Intel phát hành bộ vi xử lý mới với bộ đệm lớn hơn, mã có thể tự động điều chỉnh kích thước khối, dẫn đến số học được thực hiện theo thứ tự khác nhau và cho kết quả khác nhau. Các mã khác tự động điều chỉnh thứ tự tính toán dựa trên dung lượng bộ nhớ khả dụng - nếu bạn chạy mã trên máy tính có nhiều bộ nhớ hơn có thể khiến số học được thực hiện theo thứ tự khác và do đó cho kết quả khác nhau.
Mọi thứ trở nên phức tạp hơn đáng kinh ngạc khi bạn ném mã đa luồng, vì lịch sử thực hiện chính xác của các luồng khác nhau thường không mang tính quyết định và điều này một lần nữa có thể khiến các phép toán số học được thực hiện theo thứ tự khác nhau từ lần chạy này sang lần chạy tiếp theo.
Trong thực tế, hầu hết những gì bạn thực sự có thể hy vọng là các kết quả tương tự từ máy này sang máy khác, cho đến dung sai chính xác của các thuật toán được sử dụng. ví dụ: nếu tôi gặp vấn đề tìm kiếm gốc và sử dụng phép chia đôi để lấy gốc trong vòng + -1.0e-10, thì tôi nên vui mừng miễn là các máy khác nhau tạo ra câu trả lời đồng ý trong phạm vi dung sai đó.