Metallic ratios: Difference between revisions

m
→‎{{header|RPL}}: improved comment
m (→‎{{header|RPL}}: improved comment)
 
(3 intermediate revisions by 3 users not shown)
Line 851:
Golden ratio, where b = 1:
Value to 256 decimal places after 615 iterations : 1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911374847540880753868917521266338622235369317931800607667263544333890865959395829056383226613199282902678806752087668925017116962070322210432162695486262963136144
</pre>
 
=={{header|jq}}==
'''Works with gojq, the Go implementation of jq'''
{{trans|Wren}}
The "Rational" module used here is available at [[Arithmetic/Rational#jq]].
Note that in the version of this module used to produce the output shown below,
the function `r_to_decimal/1` does not perform rounding of the last digit, and
so these results should be correspondingly interpreted.
 
The accuracy of the following program in some cases depends on unbounded-precision integer
arithmetic, which the C implementation of jq does not support.
<syntaxhighlight lang="jq">
include "rational" {search: "."}; the defs at [[Arithmetic/Rational#jq]]
 
def names:
["Platinum", "Golden", "Silver", "Bronze", "Copper","Nickel", "Aluminium", "Iron", "Tin", "Lead"];
 
def lucas($b):
[1,1] | recurse( [last, first + $b*last] ) | first;
 
def lucas($b; $n):
"Lucas sequence for \(names[$b]) ratio, where b = \($b):",
"First \(n) elements: ",
[limit($n; lucas($b))];
 
# dp = integer (degrees of precision)
def metallic(b; dp):
{ x0: 1,
x1: 1,
x2: 0,
ratio: r(1; 1),
iters: 0 }
| .prev = (.ratio|r_to_decimal(dp)) # a string
| until(.emit;
.iters += 1
| .x2 = .b * .x1 + .x0
| .ratio = r(.x2; .x1)
| .curr = (.ratio|r_to_decimal(dp)) # a string
| if .prev == .curr
then (if (.iters == 1) then " " else "s" end) as $plural
| .emit = "Value to \(dp) dp after \(.iters) iteration\($plural): \(.curr)\n"
else .prev = .curr
| .x0 = .x1
| .x1 = .x2
end )
| .emit;
 
(range( 0;10) | lucas(.; 15), metallic(.; 32)),
 
"Golden ratio, where b = 1:", metallic(1; 256)
</syntaxhighlight>
Invocation: gojq -nrcf metallic-ratios.jq
{{output}}
<pre>
Lucas sequence for Platinum ratio, where b = 0:
First 15 elements:
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
Value to 32 dp after 1 iteration : 1
 
Lucas sequence for Golden ratio, where b = 1:
First 15 elements:
[1,1,2,3,5,8,13,21,34,55,89,144,233,377,610]
Value to 32 dp after 79 iterations: 1.61803398874989484820458683436563
 
Lucas sequence for Silver ratio, where b = 2:
First 15 elements:
[1,1,3,7,17,41,99,239,577,1393,3363,8119,19601,47321,114243]
Value to 32 dp after 45 iterations: 2.41421356237309504880168872420969
 
Lucas sequence for Bronze ratio, where b = 3:
First 15 elements:
[1,1,4,13,43,142,469,1549,5116,16897,55807,184318,608761,2010601,6640564]
Value to 32 dp after 33 iterations: 3.30277563773199464655961063373524
 
Lucas sequence for Copper ratio, where b = 4:
First 15 elements:
[1,1,5,21,89,377,1597,6765,28657,121393,514229,2178309,9227465,39088169,165580141]
Value to 32 dp after 28 iterations: 4.23606797749978969640917366873127
 
Lucas sequence for Nickel ratio, where b = 5:
First 15 elements:
[1,1,6,31,161,836,4341,22541,117046,607771,3155901,16387276,85092281,441848681,2294335686]
Value to 32 dp after 25 iterations: 5.19258240356725201562535524577016
 
Lucas sequence for Aluminium ratio, where b = 6:
First 15 elements:
[1,1,7,43,265,1633,10063,62011,382129,2354785,14510839,89419819,551029753,3395598337,20924619775]
Value to 32 dp after 23 iterations: 6.16227766016837933199889354443271
 
Lucas sequence for Iron ratio, where b = 7:
First 15 elements:
[1,1,8,57,407,2906,20749,148149,1057792,7552693,53926643,385039194,2749201001,19629446201,140155324408]
Value to 32 dp after 21 iterations: 7.14005494464025913554865124576351
 
Lucas sequence for Tin ratio, where b = 8:
First 15 elements:
[1,1,9,73,593,4817,39129,317849,2581921,20973217,170367657,1383914473,11241683441,91317382001,741780739449]
Value to 32 dp after 20 iterations: 8.12310562561766054982140985597407
 
Lucas sequence for Lead ratio, where b = 9:
First 15 elements:
[1,1,10,91,829,7552,68797,626725,5709322,52010623,473804929,4316254984,39320099785,358197153049,3263094477226]
Value to 32 dp after 19 iterations: 9.10977222864644365500113714088139
 
Golden ratio, where b = 1:
Value to 256 dp after 614 iterations: 1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911374847540880753868917521266338622235369317931800607667263544333890865959395829056383226613199282902678806752087668925017116962070322210432162695486262963136144
</pre>
 
Line 1,736 ⟶ 1,843:
1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911374847540880753868917521266338622235369317931800607667263544333890865959395829056383226613199282902678806752087668925017116962070322210432162695486262963136144
</pre>
=={{header|RPL}}==
{{works with|HP|49}}
« UNROT SWAP OVER IDIV2 SWAP "." + 4 ROLLD UNROT
→ b
« 1 SWAP '''START'''
10 * b IDIV2
UNROT + SWAP
'''NEXT''' DROP
» » '<span style="color:blue">LDIVN</span>' STO <span style="color:grey">@ ''( a b p → "float" )'' with float = a/b with p decimal places</span>
« 0 9 '''FOR''' b
{ "Pt" "Au" "Ag" "CuSn" "Cu" "Ni" "Al" "Fe" "Sn" "Pb" } b 1 + DUP SUB
1 1
3 15 '''START''' DUP2 b * + '''NEXT'''
15 →LIST "seq" →TAG +
0 1 1 "1.00000000000000000000000000000000"
'''DO''' UNROT DUP b * ROT +
4 ROLL 1 + 4 ROLLD
'''UNTIL''' DUP2 SWAP 32 <span style="color:blue">LDIVN</span> 4 ROLL OVER == '''END'''
"ratio" →TAG UNROT DROP2 ROT SWAP +
SWAP "iter" →TAG +
'''NEXT'''
» '<span style="color:blue">TASK</span>' STO
{{out}}
<pre>
10: { "Pt" seq:{ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 } ratio:"1.00000000000000000000000000000000" iter:1 }
9: { "Au" seq:{ 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 }
ratio:"1.61803398874989484820458683436563" iter:79 }
8: { "Ag" seq:{ 1 1 3 7 17 41 99 239 577 1393 3363 8119 19601 47321 114243 } ratio:"2.41421356237309504880168872420969" iter:45 }
7: { "CuSn" seq:{ 1 1 4 13 43 142 469 1549 5116 16897 55807 184318 608761 2010601 6640564 } ratio:"3.30277563773199464655961063373524" iter:33 } { "Cu" seq:{ 1 1 5 6: 21 89 377 1597 6765 28657 121393 514229 2178309 9227465 39088169 165580141 } ratio:"4.23606797749978969640917366873127" iter:28 }
5: { "Ni" seq:{ 1 1 6 31 161 836 4341 22541 117046 607771 3155901 16387276 85092281 441848681 2294335686 } ratio:"5.19258240356725201562535524577016" iter:25 }
4: { "Al" seq:{ 1 1 7 43 265 1633 10063 62011 382129 2354785 14510839 89419819 551029753 3395598337 20924619775 } ratio:"6.16227766016837933199889354443271" iter:23 }
3: { "Fe" seq:{ 1 1 8 57 407 2906 20749 148149 1057792 7552693 53926643 385039194 2749201001 19629446201 140155324408 } ratio:"7.14005494464025913554865124576351" iter:21 }
2: { "Sn" seq:{ 1 1 9 73 593 4817 39129 317849 2581921 20973217 170367657 1383914473 11241683441 91317382001 741780739449 } ratio:"8.12310562561766054982140985597407" iter:20 }
1: { "Pb" seq:{ 1 1 10 91 829 7552 68797 626725 5709322 52010623 473804929 4316254984 39320099785 358197153049 3263094477226 } ratio:"9.10977222864644365500113714088139" iter:19 }
</pre>
 
=={{header|Ruby}}==
{{works with|Ruby|2.3}}
Line 2,042 ⟶ 2,186:
{{libheader|Wren-big}}
{{libheader|Wren-fmt}}
<syntaxhighlight lang="ecmascriptwren">import "./big" for BigInt, BigRat
import "./fmt" for Fmt
 
var names = ["Platinum", "Golden", "Silver", "Bronze", "Copper","Nickel", "Aluminium", "Iron", "Tin", "Lead"]
1,150

edits