Addition-chain exponentiation: Difference between revisions

→‎{{header|C}}: add comparison to binary chains
(→‎{{header|C}}: add comparison to binary chains)
Line 127:
x.u, x.v, n, v[l].u, v[l].v);
 
return v[l]x;
}
 
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(31415n2);
 
chain_expo(r1, 27182n1);
chain_expo(r2, 31415n2);
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:...
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</lang>
 
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}}==
Anonymous user