Combinations and permutations: Difference between revisions

→‎{{header|Bracmat}}: Added floating point implementations of C and P
(→‎{{header|jq}}: add details about gojq)
(→‎{{header|Bracmat}}: Added floating point implementations of C and P)
Line 322:
 
=={{header|Bracmat}}==
BracmatThis cannotsolution shows results from bignum as well handleas floating point numbersimplementations. Instead,If thisbignum solutionanswers showsare very big, only the first 50 digits and a count of the digits that are not shown are shown. The bignum answers are shown as Cn and Pn, while the floating point answers are shown as Cf and Pf. Answers are aligned to make it easy to compare the decimals.
<syntaxhighlight lang="bracmat">( ( C
= n k coef
. !arg:(?n,?k)
Line 336:
& !coef
)
& ( compileBinomialFunctionThatDoesFloatingPointCalculations
=
. new
$ ( UFP
,
' ( (s.n) (s.k)
. "**************************************************************
*** Notice the difference between the following four lines ***
*** of code and the much shorter (!n+-1*!k:<!k:?k|) in ***
*** function C above. UFP grammar is simpler than usual ***
*** Bracmat grammar. UFP code is therefore less terse. ***
**************************************************************"
& !n+-1*!k:?n-k
& ( !n-k:<!k&!n-k:?k
|
)
& 1:?coef
& whl
' ( !k:>0
& !coef*!n*!k^-1:?coef
& !k+-1:?k
& !n+-1:?n
)
& !coef
)
)
)
& compileBinomialFunctionThatDoesFloatingPointCalculations$
: ?binom
& ( P
= n k result
Line 348 ⟶ 377:
& !result
)
& ( compilePermutationFunctionThatDoesFloatingPointCalculations
=
. new
$ ( UFP
,
' ( (s.n) (s.k)
. !n+-1*!k:?k
& 1:?result
& whl
' ( !n:>!k
& !n*!result:?result
& !n+-1:?n
)
& !result
)
)
)
& compilePermutationFunctionThatDoesFloatingPointCalculations$
: ?permu
& 0:?i
& whl
Line 358 ⟶ 406:
' ( 10+!i:~>60:?i
& div$(!i.3):?k
& out$(!i CCn !k "= " C$(!i,!k))
& out$(!i Cf !k "=" (binom..go)$(!i,!k))
)
& ( displayBig
Line 370 ⟶ 419:
' ( !is:%?i ?is
& div$(!i.3):?k
& out
& out$(str$(!i " P " !k " = " displayBig$(P$(!i,!k))))
$ ( str
$ (!i " Pn " !k " = " displayBig$(P$(!i,!k)))
)
& out
$ ( str
$ (!i " Pf " !k " = " (permu..go)$(!i,!k))
)
)
& 0:?i
Line 376 ⟶ 432:
' ( 100+!i:~>1000:?i
& div$(!i.3):?k
& out
& out$(str$(!i " C " !k " = " displayBig$(C$(!i,!k))))
$ ( str
$ (!i " Cn " !k " = " displayBig$(C$(!i,!k)))
)
& out
$ ( str
$ (!i " Cf " !k " = " (binom..go)$(!i,!k))
)
)
)& all done;</syntaxhighlight>
Output:
<pre>1 P 0 = 1
Line 392 ⟶ 455:
11 P 3 = 990
12 P 4 = 11880
10 CCn 3 = 120
10 Cf 3 = 1.1999999999999999E+02
20 C 6 = 38760
3020 CCn 106 = 30045015 38760
20 Cf 6 = 3.8759999999999993E+04
40 C 13 = 12033222880
5030 CCn 1610 = 4923689695575 30045015
30 Cf 10 = 3.0045014999999989E+07
60 C 20 = 4191844505805495
540 PCn 113 = 5 12033222880
40 Cf 13 = 1.2033222880000000E+10
50 P 16 = 103017324974226408345600000
50 Cn 16 = 4923689695575
500 P 166 = 35348749217429427876093618266017623068440028791060... (385 more digits)
50 Cf 16 = 4.9236896955750000E+12
1000 P 333 = 59693262885034150890397017659007842809981894765670... (922 more digits)
60 Cn 20 = 4191844505805495
5000 P 1666 = 68567457572556742754845369402488960622341567102448... (5976 more digits)
60 Cf 20 = 4.1918445058054930E+15
15000 P 5000 = 96498539887274939220148588059312959807922816886808... (20420 more digits)
5 Pn 1 = 5
100 C 33 = 294692427022540894366527900
5 Pf 1 = 5.0000000000000000E+00
200 C 66 = 72697525451692783415270666511927389767550269141935... (4 more digits)
50 Pn 16 = 103017324974226408345600000
300 C 100 = 41582514632585647447833835263264055802804660057436... (32 more digits)
50 Pf 16 = 1.0301732497422640E+26
400 C 133 = 12579486841821087021333484756519650044917494358375... (60 more digits)
500 CPn 166 = 39260283861944227552204083450723314281973490135301 35348749217429427876093618266017623068440028791060... (87385 more digits)
500 Pf 166 = INF
600 C 200 = 25060177832214028050056167705132288352025510250879... (115 more digits)
7001000 CPn 233333 = 81032035633395999047404536440311382329449203119421 59693262885034150890397017659007842809981894765670... (142922 more digits)
1000 Pf 333 = INF
800 C 266 = 26456233626836270342888292995561242550915240450150... (170 more digits)
9005000 CPn 3001666 = 17433563732964466429607307650857183476303419689548 68567457572556742754845369402488960622341567102448... (1985976 more digits)
5000 Pf 1666 = INF
1000 C 333 = 57761345531476516697774863235496017223394580195002... (225 more digits)</pre>
15000 Pn 5000 = 96498539887274939220148588059312959807922816886808... (20420 more digits)
15000 Pf 5000 = INF
100 Cn 33 = 294692427022540894366527900
100 Cf 33 = 2.9469242702254079E+26
200 Cn 66 = 72697525451692783415270666511927389767550269141935... (4 more digits)
200 Cf 66 = 7.2697525451692816E+53
300 Cn 100 = 41582514632585647447833835263264055802804660057436... (32 more digits)
300 Cf 100 = 4.1582514632585569E+81
400 Cn 133 = 12579486841821087021333484756519650044917494358375... (60 more digits)
400 Cf 133 = 1.2579486841821091E+109
500 Cn 166 = 39260283861944227552204083450723314281973490135301... (87 more digits)
500 Cf 166 = 3.9260283861944195E+136
600 Cn 200 = 25060177832214028050056167705132288352025510250879... (115 more digits)
600 Cf 200 = 2.5060177832213946E+164
700 Cn 233 = 81032035633395999047404536440311382329449203119421... (142 more digits)
700 Cf 233 = 8.1032035633395859E+191
800 Cn 266 = 26456233626836270342888292995561242550915240450150... (170 more digits)
800 Cf 266 = 2.6456233626836295E+219
900 Cn 300 = 17433563732964466429607307650857183476303419689548... (198 more digits)
900 Cf 300 = 1.7433563732964451E+247
1000 Cn 333 = 57761345531476516697774863235496017223394580195002... (225 more digits)
1000 Cf 333 = 5.7761345531476355E+274
{!} all done</pre>
 
=={{header|C}}==
10

edits