斐波那契精度的Phi显示能力


9

编写一些代码,该代码采用单个非负整数n,并输出与n个斐波那契数相同的十进制数的Phi 的n次幂(ϕ,黄金比例,大约为1.61803398874989)。

您的代码必须为所有输入产生正确的数字序列,最多10个字符(55个十进制数字)。输出必须是人类可读的十进制。您可以选择是将最后一位四舍五入到最接近的值,还是截断该值。请指定您的代码使用哪个代码。

n和输出,最多10位,四舍五入:

 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并输出,最大为10,四舍五入到最接近的值:

 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个斐波那契数为13,因此n = 7 ϕ 7的输出具有13个小数位。您不能截断显示太少数字的尾随零。请参阅第一张表中6的输出,该输出以单个零结尾,以保持小数精度为8位。

也许是一项奖励,说出您的程序可以正确输出的最高数字是多少。


无法处理那么多小数位的语言呢?我在这里有一个24字节的Pyth解决方案,它只能工作到n = 7,因为我不能显示超过15个小数位。我还是应该发布吗?
Denker

@DenkerAffe当然,您可以发布它,但是要注意它是无效的,因为它不能完成最后三个测试用例。可能有人会为您的答案增加精确度!
CJ丹尼斯

Answers:


3

dc,26位元组

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

由于逗号后的初始精度为99位数,因此可以处理输入11。动态(或更高的静态)精度是可能的,但是会增加字节数。

测试用例

$ 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

怎么运行的

由于所期望的输出是φ Ñ,我们可以计算出斐波那契数F(n)的作为⌊φ ñ ÷√5+0.5⌋很少额外的努力。

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个字节

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

基本解决方案。四舍五入到最接近的值。仍在验证不会使我的计算机内存不足的最高值。输入32有效,但需要45分钟,并使用16GiB的RAM。但是,在给定无限时间和内存的情况下,从理论上讲,它可以运行任何值。


1
您可以发布输出吗?我需要作弊,并使用您的输出来添加最后几个测试用例。您要四舍五入?向下还是最接近?“无限资源”就足够了。我不要求您用光内存!
CJ Dennis
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.