Nhiệm vụ của bạn là tính căn bậc hai của 2 bằng Phương pháp Newton - với một chút thay đổi. Chương trình của bạn là tính toán một lần lặp bằng Phương pháp của Newton và xuất mã nguồn cho lần lặp sau (phải có khả năng thực hiện tương tự).
Phương pháp của Newton được mô tả khá kỹ lưỡng trên Wikipedia
Để tính căn bậc 2 bằng phương pháp Newton, bạn:
- Định nghĩa
f(x) = x^2 - 2
- Định nghĩa
f'(x) = 2x
- Xác định
x[0]
(dự đoán ban đầu)= 1
- Định nghĩa
x[n+1] = x[n] - (f[n] / f'[n])
Mỗi lần lặp sẽ di chuyển x [n] gần hơn với căn bậc hai của hai. Vì thế -
x[0] = 1
x[1] = x[0] - f(x[0])/f'(x[0]) = 1 - (1 ^ 2 - 2) / (2 * 1) = 1.5
x[2] = x[1] - f(x[1])/f'(x[1]) = 1.5 - (1.5 ^ 2 - 2) / (2 * 1.5) = 1.416666667
x[3] = x[2] - f(x[2])/f'(x[1]) = 1.416666667 - (1.416666667 ^ 2 - 2) / (2 * 1.416666667) = 1.414215686
- và v.v.
Chương trình của bạn sẽ:
- Tính toán
x[n]
đâun
là số lần chương trình đã được chạy - Xuất mã nguồn cho một chương trình hợp lệ trong cùng một ngôn ngữ phải tính toán
x[n+1]
và đáp ứng cùng tiêu chí của câu hỏi này. - Dòng đầu tiên của mã nguồn phải là kết quả tính toán, được nhận xét đúng. Nếu nguồn yêu cầu một cái gì đó cụ thể (chẳng hạn như một shebang) trên dòng đầu tiên, kết quả có thể được đặt trên dòng thứ hai.
Lưu ý rằng
- Chương trình của bạn phải sử dụng dự đoán ban đầu về
x[0] = 1
- Các lỗ hổng tiêu chuẩn được áp dụng
- Bất kỳ chức năng xây dựng, căn bậc hai hoặc hàm xroot đều bị cấm
- Chương trình của bạn không được chấp nhận bất kỳ đầu vào nào. Nó phải hoàn toàn khép kín.
Điểm của bạn là kích thước của chương trình ban đầu của bạn theo byte UTF-8. Điểm thấp nhất sẽ thắng.
x = x-(x*x-2)/(2*x)
?