Phi'nin güçlerini Fibonacci hassasiyetiyle görüntüleme


9

Negatif olmayan tek bir tamsayı n alan ve Phi'nin (ϕ, Altın Oran, yaklaşık 1.61803398874989) n'inci gücünü veren n. Fibonacci sayısıyla aynı sayıda ondalık basamağa sahip bir kod yazın .

Kodunuz en az 10 (55 ondalık basamağa) kadar tüm girişler için doğru basamak dizisini üretmelidir. Çıktı, insan tarafından okunabilen ondalık olmalıdır. Son basamağı en yakın değere yuvarlamayı veya değeri kısaltmayı seçebilirsiniz. Lütfen kodunuzun hangisini kullandığını belirtin.

n ve çıktı, 10'a kadar, aşağı yuvarlama:

 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 ve çıkış, 10'a kadar, en yakın değere yuvarlama:

 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

7. Fibonacci sayısı 13'tür, bu nedenle n = 7, ϕ 7 için çıktı 13 ondalık basamağa sahiptir. Çok az basamak görüntüleyecek sondaki sıfırları kesmemelisiniz; ondalık duyarlığı 8 basamakta tutmak için tek bir sıfırla biten birinci tabloda 6'nın çıktısına bakın.

Belki bir bonus olarak, programınızın doğru şekilde çıkarabileceği en yüksek sayının ne olduğunu söyleyin.


Pek çok ondalık basamağı kaldıramayacak diller ne olacak? Burada 15'den fazla ondalık basamak görüntüleyemediğim için sadece n = 7'ye kadar çalışan 24 baytlık bir Pyth çözümüm var. Yine de yayınlamalı mıyım?
Denker

@DenkerAffe Tabii, gönderebilirsiniz ancak son üç test vakasını yapamayacağı için geçerli olmadığını belirten bir notla. Birinin cevabınıza hassasiyet katması ilham olabilir!
CJ Dennis

Yanıtlar:


3

dc, 26 bayt

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

Virgülden sonra 99 basamaklı başlangıç ​​hassasiyeti nedeniyle, bu giriş 11'i çalıştıracaktır . Dinamik (veya daha yüksek statik) bir hassasiyet mümkündür, ancak bayt sayısını yükseltir.

Test senaryoları

$ 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

Nasıl çalışır

İstenen çıkış olduğu φ , n , biz Fibonacci sayı hesaplayabilir F (n) olarak ⌊φ n ÷ √5 + 0.5⌋ az ek bir çaba ile.

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

Mathematica, 50 bayt

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

Temel çözüm. En yakın değere yuvarlar. Bilgisayarımın belleği tükenmeyecek en yüksek değeri hala doğrulıyorum. Giriş 32çalışır, ancak 45 dakika sürer ve 16GiB RAM kullanır. Bununla birlikte, sonsuz zaman ve bellek verildiğinde, bu teorik olarak herhangi bir değer için çalışabilir.


1
Çıktıyı gönderir misiniz lütfen? Hile yapmam ve son birkaç test senaryosunu eklemek için çıktısını kullanmam gerekiyor. Hangi yöne yuvarlanıyorsun? Aşağı ya da en yakın? "Sonsuz kaynaklar" yeterince iyidir. Hafızanızın bitmesini istemiyorum!
CJ Dennis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.