Hiển thị sức mạnh của Phi với độ chính xác Fibonacci


9

Viết một số mã lấy một số nguyên n không âm duy nhất và tạo ra công suất thứ n của Phi (, Tỷ lệ vàng, xấp xỉ 1.61803398874989) với cùng số chữ số thập phân như số Fibonacci thứ n .

Mã của bạn phải tạo ra chuỗi chữ số chính xác cho tất cả các đầu vào tối thiểu 10 (55 chữ số thập phân). Đầu ra phải là số thập phân có thể đọc được. Bạn có thể chọn làm tròn chữ số cuối cùng đến giá trị gần nhất hoặc cắt bớt giá trị. Vui lòng chỉ định mã nào bạn sử dụng.

n và đầu ra, tối đa 10, làm tròn xuống:

 0   1
 1   1.6
 2   2.6
 3   4.23
 4   6.854
 5  11.09016
 6  17.94427190
 7  29.0344418537486
 8  46.978713763747791812296
 9  76.0131556174964248389559523684316960
10 122.9918693812442166512522758901100964746170048893169574174

n và đầu ra, tối đa 10, làm tròn đến giá trị gần nhất:

 0   1
 1   1.6
 2   2.6
 3   4.24
 4   6.854
 5  11.09017
 6  17.94427191
 7  29.0344418537486
 8  46.978713763747791812296
 9  76.0131556174964248389559523684316960
10 122.9918693812442166512522758901100964746170048893169574174

Số Fibonacci thứ 7 là 13, do đó, đầu ra cho n = 7, 7 , có 13 chữ số thập phân. Bạn không được cắt các số 0 ở cuối sẽ hiển thị quá ít chữ số; xem đầu ra cho 6 trong bảng đầu tiên, kết thúc bằng một số 0 duy nhất để giữ độ chính xác thập phân ở 8 chữ số.

Có thể là một phần thưởng, hãy nói con số cao nhất mà chương trình của bạn có thể đưa ra chính xác là bao nhiêu.


Điều gì về các ngôn ngữ không thể xử lý nhiều vị trí thập phân? Tôi đã nhận được một giải pháp Pyth 24 byte ở đây chỉ hoạt động cho đến n = 7, vì tôi không thể hiển thị hơn 15 vị trí thập phân. Tôi có nên đăng nó không?
Denker

@DenkerAffe Chắc chắn, bạn có thể đăng nó nhưng với một lưu ý nói rằng nó không hợp lệ vì nó không thể thực hiện ba trường hợp thử nghiệm cuối cùng. Nó có thể là nguồn cảm hứng cho ai đó để thêm độ chính xác cho câu trả lời của bạn!
CJ Dennis

Câu trả lời:


3

dc, 26 byte

99k5v1+2/?^d5v/.5+0k1/k1/p

Do độ chính xác ban đầu là 99 chữ số sau dấu phẩy, điều này sẽ hoạt động lên đầu vào yo 11 . Độ chính xác động (hoặc tĩnh cao hơn) là có thể, nhưng sẽ nâng cao số byte.

Các trường hợp thử nghiệm

$ for ((i = 0; i < 11; i++)) { dc -e '99k5v1+2/?^d5v/.5+0k1/k1/p' <<< $i; }
1
1.6
2.6
4.23
6.854
11.09016
17.94427190
29.0344418537486
46.978713763747791812296
76.0131556174964248389559523684316960
122.9918693812442166512522758901100964746170048893169574174

Làm thế nào nó hoạt động

Vì đầu ra mong muốn là φ n , chúng ta có thể tính toán số Fibonacci F (n)⌊φ n ÷ 5 + 0,5⌋ với ít nỗ lực bổ sung.

99k                         Set the precision to 99.
   5v                       Compute the square root of 5.
     1+                     Add 1.
       2/                   Divide by 2.
                            This pushes the golden ratio.
         ?                  Read the input from STDIN.
          ^                 Elevate the golden ratio to that power.
           d                Push a copy.
            5v/             Divide it by the square root of 5.
               .5+          Add 0.5.
                  0k        Set the precision to 0.
                    1/      Divide by 1, truncating to the desired precision.
                            This pushes F(n).
                      k     Set the precision to F(n).
                       1/   Divide by 1, truncating to the desired precision.
                         p  Print.

0

Toán học, 50 byte

N[GoldenRatio^#,2^#]~NumberForm~{2^#,Fibonacci@#}&

Giải pháp cơ bản. Làm tròn đến giá trị gần nhất. Vẫn xác minh giá trị cao nhất sẽ không làm cho máy tính của tôi hết bộ nhớ. Đầu vào 32hoạt động, nhưng phải mất 45 phút và sử dụng 16GiB RAM. Tuy nhiên, với thời gian và bộ nhớ vô hạn, về mặt lý thuyết có thể chạy cho bất kỳ giá trị nào.


1
Bạn có thể gửi đầu ra xin vui lòng? Tôi cần phải gian lận và sử dụng đầu ra của bạn để thêm một vài trường hợp thử nghiệm cuối cùng. Con đường nào bạn làm tròn? Xuống hay đến gần nhất? "Tài nguyên vô hạn" là đủ tốt. Tôi không yêu cầu bạn hết bộ nhớ!
CJ Dennis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.