Data update
This commit is contained in:
parent
35bcdeebf8
commit
74c69a0df6
2427 changed files with 31826 additions and 3468 deletions
|
|
@ -0,0 +1,64 @@
|
|||
func perm x y .
|
||||
z = 1
|
||||
for i = x - y + 1 to x
|
||||
z *= i
|
||||
.
|
||||
return z
|
||||
.
|
||||
func fact x .
|
||||
z = 1
|
||||
for i = 2 to x
|
||||
z *= i
|
||||
.
|
||||
return z
|
||||
.
|
||||
func comb x y .
|
||||
if x - y < y
|
||||
y = x - y
|
||||
.
|
||||
return perm x y / fact y
|
||||
.
|
||||
#
|
||||
e = 2.7182818284590452354
|
||||
func log n .
|
||||
return log10 n / log10 e
|
||||
.
|
||||
func lstirling n .
|
||||
if n < 10
|
||||
return lstirling (n + 1) - log (n + 1)
|
||||
.
|
||||
return 0.5 * log (2 * pi * n) + n * log (n / e + 1 / (12 * e * n))
|
||||
.
|
||||
func$ tolog v .
|
||||
h = v div log 10
|
||||
return pow e (v - h * log 10) & "e" & h
|
||||
.
|
||||
func$ permf n k .
|
||||
return tolog (lstirling n - lstirling (n - k))
|
||||
.
|
||||
func$ combf n k .
|
||||
return tolog (lstirling n - lstirling (n - k) - lstirling k)
|
||||
.
|
||||
print "=> Exact results:"
|
||||
for n = 1 to 12
|
||||
p = n div 3
|
||||
print "P(" & n & "," & p & ")=" & perm n p
|
||||
.
|
||||
#
|
||||
# double has 53 bits for integer
|
||||
#
|
||||
for n = 10 step 10 to 50
|
||||
p = n div 3
|
||||
print "C(" & n & "," & p & ")=" & comb n p
|
||||
.
|
||||
#
|
||||
print ""
|
||||
print "=> Floating point approximations:"
|
||||
for n in [ 5 50 500 1000 5000 15000 ]
|
||||
p = n div 3
|
||||
print "P(" & n & "," & p & ")=" & permf n p
|
||||
.
|
||||
for n = 100 step 100 to 1000
|
||||
p = n div 3
|
||||
print "C(" & n & "," & p & ")=" & combf n p
|
||||
.
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
fn perm(n: f64, k: f64) -> f64 {
|
||||
let mut result: f64 = 1.0;
|
||||
let mut i: f64 = 0.0;
|
||||
|
||||
while i < k {
|
||||
result *= n - i;
|
||||
i += 1.0;
|
||||
}
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
fn comb(n: f64, k: f64) -> f64 {
|
||||
perm(n, k) / perm(k, k)
|
||||
}
|
||||
|
||||
fn main() {
|
||||
const P: f64 = 12.0;
|
||||
const C: f64 = 60.0;
|
||||
|
||||
let mut j: f64 = 1.0;
|
||||
let mut k: f64 = 10.0;
|
||||
|
||||
while j < P {
|
||||
println!("P({},{}) = {}", P, j, perm(P, j).floor());
|
||||
j += 1.0;
|
||||
}
|
||||
|
||||
while k < C {
|
||||
println!("C({},{}) = {}", C, k, comb(C, k).floor());
|
||||
k += 10.0;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
import "/big" for BigInt
|
||||
import "/fmt" for Fmt
|
||||
import "/iterate" for Stepped
|
||||
import "./big" for BigInt
|
||||
import "./fmt" for Fmt
|
||||
import "./iterate" for Stepped
|
||||
|
||||
var perm = Fn.new { |n, k|
|
||||
if (n <= 0 || k < 0) Fiber.abort("Invalid argument(s).")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue