Anonymous user
Addition-chain exponentiation: Difference between revisions
→{{header|C}}: add comparison to binary chains
m (→{{header|C}}: oops) |
(→{{header|C}}: add comparison to binary chains) |
||
Line 127:
x.u, x.v, n, v[l].u, v[l].v);
return
}
int bin_len(int n)
{
int r, o;
for (r = o = -1; n; n >>= 1, r++)
if (n & 1) o++;
return r + o;
}
Line 134 ⟶ 142:
cplx r1 = {1.0000254989, 0.0000577896},
r2 = {1.0000220632, 0.0000500026};
int n1 = 27182, n2 = 31415, i;
init();
puts("Precompute chain lengths");
seq_len(
chain_expo(r1,
chain_expo(r2,
puts("\nchain lengths: shortest binary");
printf("%14d %7d %7d\n", n1, seq_len(n1), bin_len(n1));
printf("%14d %7d %7d\n", n2, seq_len(n2), bin_len(n2));
for (i = 1; i < 100; i++)
printf("%14d %7d %7d\n", i, seq_len(i), bin_len(i));
return 0;
}</lang>output<lang>
Exponents:
1 2 4 8 10 18 28 46 92 184 212 424 848 1696 3392 6784 13568 27136 27182
(1.000025 + i0.000058)^27182 = -0.000001 + i2.000001
Exponents:
1 2 4 8 16 17 33 49 98 196 392 784 1568 3136 6272 6289 12561 25122 31411 31415
(1.000022 + i0.000050)^31415 = -0.000001 + i2.000000
chain lengths: shortest binary
27182 18 21
31415 19 24
1 0 0
2 1 1
3 2 2
4 2 2
...
89 9 9
90 8 9
91 9 10
92 8 9
93 9 10
...</lang>
=={{header|J}}==
|