Tôi đang tìm cách tính số n chữ số thứ Pi trong môi trường bộ nhớ thấp. Vì tôi không có số thập phân có sẵn cho tôi, điều này integer-only BBP algorithm in Python đã là một điểm khởi đầu tuyệt vời. Tôi chỉ cần tính một chữ số Pi mỗi lần. Làm cách nào để xác định mức thấp nhất tôi có thể đặt D, "số chữ số của độ chính xác làm việc"?Yêu cầu làm việc chính xác cho thuật toán BBP?
D = 4 cho tôi nhiều chữ số chính xác, nhưng một vài chữ số sẽ bị tắt một. Ví dụ, số máy tính 393 với độ chính xác 4 cho tôi 0xafda, từ đó tôi trích xuất số 0xa. Tuy nhiên, chữ số chính xác là 0xb.
Bất kể tôi đặt D cao đến mức nào, có vẻ như việc kiểm tra đủ số chữ số sẽ tìm thấy một số mà công thức trả về giá trị không chính xác.
Tôi đã thử tăng độ chính xác khi chữ số "đóng" với chữ số khác, ví dụ: 0x3fff hoặc 0x1000, nhưng không thể tìm thấy bất kỳ định nghĩa tốt nào về "đóng"; ví dụ: tính ở số 9798 cho tôi 0x c de6, không quá gần 0xd000, nhưng chữ số chính xác là 0xd.
Bất kỳ ai cũng có thể giúp tôi tìm ra độ chính xác cần thiết để tính toán một chữ số đã cho bằng thuật toán này không?
Cảm ơn bạn,
chỉnh sửa
để tham khảo:
precision (D) first wrong digit ------------- ------------------ 3 27 4 161 5 733 6 4329 7 21139 8+ ???
Lưu ý rằng tôi đang tính toán một chữ số tại một thời điểm, ví dụ:
for i in range(1,n):
D = 3 # or whatever precision I'm testing
digit = pi(i) # extracts most significant digit from integer-only BBP result
if(digit != HARDCODED_PI[i]):
print("non matching digit #%d, got %x instead of %x" % (i,digit,HARDCODED_PI[i]))
Mặc dù tôi đang thử nghiệm nhiều chữ số, tôi tính mỗi chữ số một lần. Bạn đang nói rằng không có cách nào để biết chính xác cần bao nhiêu để có được một chữ số chính xác tại một vị trí nhất định? – tba
@brainfsck: bạn chắc chắn có thể sử dụng ** ngoại suy ** trên dữ liệu bạn đã có ... nó có thể không dễ dàng. – ANeves
Tôi chỉ xem xét điều này ngay bây giờ, để xem liệu tôi có thể giải thích nơi xảy ra lỗi làm tròn hay không. Nhưng xin lưu ý rằng tập lệnh bạn đang sử dụng không nhằm mục đích tạo ra các chữ số tuần tự - nó lặp lại từ 0..n - do đó, tính toán chữ số thứ hai cần thời gian tỷ lệ thuận với n, điều này rất xa lý tưởng. Các trang wikipedia có thêm xuống một thuật toán spigot đúng để tạo ra các chữ số từng người một - bạn có thể sử dụng nó? – mdma