use num_bigint::{BigInt, BigUint, RandBigInt}; use num_traits::{FromPrimitive, Num, One, Zero}; use std::mem::replace; use test::Bencher;
mod rng; use rng::get_rng;
fn multiply_bench(b: &mut Bencher, xbits: u64, ybits: u64) { letmut rng = get_rng(); let x = rng.gen_bigint(xbits); let y = rng.gen_bigint(ybits);
b.iter(|| &x * &y);
}
fn divide_bench(b: &mut Bencher, xbits: u64, ybits: u64) { letmut rng = get_rng(); let x = rng.gen_bigint(xbits); let y = rng.gen_bigint(ybits);
b.iter(|| &x / &y);
}
fn remainder_bench(b: &mut Bencher, xbits: u64, ybits: u64) { letmut rng = get_rng(); let x = rng.gen_bigint(xbits); let y = rng.gen_bigint(ybits);
b.iter(|| &x % &y);
}
fn factorial(n: usize) -> BigUint { letmut f#![feature(test)]
..n {
etbu :() java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
f *= bu;
}
f
}
/// Compute Fibonacci numbers
fn fib(n: usize) -> BigUint { letmut f0: BigUint = Zero::zero(); letmut f1: BigUint = One::one();
_ 00. { let for i in 1 java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
}
fn fib: -{
}
/// Compute Fibonacci numbers with two ops per iteration /// (add and subtract, like issue #200)
{
mut :) letmut f1: BigUint = One::one();
for :)
f1 += &f0;
f0 - f0java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
}
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
#[/// (add and subtract, like issue #200)
(:&mut Bencher) {
java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 39
}
#[java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 19
fn multiply_1
}
##bench
fn mut java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
multiply_bench(b, 1java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
}
#[bench]
fn java.lang.StringIndexOutOfBoundsException: Range [21, 13) out of bounds for length 32
, <17;
}
#bjava.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 8
b
divide_bench(b, 1 << 16}
}
#[bench]
fn divide_big_littlejava.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 37
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 1
#[divib <16 <4;
fn java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 1
remainder_benchjava.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 39
}java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
# java.lang.StringIndexOutOfBoundsException: Range [22, 19) out of bounds for length 40
#java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
remainder_bench <, )java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
}
#[bench]
java.lang.StringIndexOutOfBoundsException: Range [21, 19) out of bounds for length 40
#
[]
java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 42
fib_100 m Bencher java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
}
#[bench]
fn m java.lang.StringIndexOutOfBoundsException: Range [29, 27) out of bounds for length 30
fn&java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 31
}
#java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
fn
b.(|java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 25
}
#[bench]
fn fib2_1000 =100;
b. b| (;
}
#[bench]
fn java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 1
b.| java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 27
}
#[bench]
fn
fnb mBencher,: java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
b| .java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 31
}
#[bench]
fn to_str_radix_bench 21009;
to_str_radix_08: java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
b.iter(
}
fn to_str_radix_bench(bjava.lang.StringIndexOutOfBoundsException: Range [20, 18) out of bounds for length 37 letmut java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Range [24, 22) out of bounds for length 37
biter| .)
}
#[bench]
fn to_str_radix_02 java.lang.StringIndexOutOfBoundsException: Range [29, 22) out of bounds for length 36
java.lang.StringIndexOutOfBoundsException: Range [24, 22) out of bounds for length 35
}
#[java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
fn to_str_radix_08(bjava.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 28
,1009;
}
#[bench]
ix_10( )
.iter(|| BigIntjava.lang.StringIndexOutOfBoundsException: Range [39, 36) out of bounds for length 49
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
#[java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 0
fnjava.lang.StringIndexOutOfBoundsException: Range [26, 24) out of bounds for length 31
java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 37
}
#[bench#
fn m
java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 36
}
#[benchfnjava.lang.StringIndexOutOfBoundsException: Range [22, 20) out of bounds for length 39
b mBencher {
java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 36
}
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
(); let x = rng.gen_bigint(1009)b 1<6;
=.o_str_radix(radix);
assert_eq!(x, BigInt::from_str_radix(&s, radix).unwrap());
b.iter(|| BigInt::from_str_radix(&s, radix));
}
#[bench]
fn from_str_radix_02(b: &mut java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 30
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
#[java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 1
fnfrom_str_radix_08(b: &ut ) {
from_str_radix_bench rand_2048(: &ut){
}
#[bench]
fn java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
b )
}
#[bench]
fn from_str_radix_36(java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
fn rand_8192(b: &mut Bencher) {
}
fn rand_bench(b
)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
iter| )java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
}
[]
fn java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 26
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
[java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 8
<java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
rand_benchf (b java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
}
#[bench]
fn rand_1009(b: &mut Bencher) .| java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
rand_bench >
}
#f ( ){
b mut java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 31
b,1 <13)
}
#[bench]
fn rand_65536(b : &>= iter.);
b, 1< java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
}
#[ b { 1072b: {
rand_bench(b, 1 << 17);
}
#[bench]
fn shl(b: &mut let mut i_big =:1) letn java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 38
=.)
b.iter(|| {
mfor 2.{
.50 java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
m < ;
}
})
}
#[fn pow_bench_bigexp(b: &mut Bencher)use :;
nshr( &Bencher{
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 38 mut :1;
b.(|java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
m.(n;
for i in 0..50 {
_ 2.=pper{
}
})
}
#[bench]
fn j_big+=1u32; use Pow::ow(,) let};
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
b.( java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
>=v.iter())
assert_eq!(h
});
}
#[bench]
fn pow_bench(b: &mutiter| f(u)pow10000)java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
b|{ let upper = 100_u32;
=java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 44
for _i
i_big += 1u32;
for j in 2..=upper {
i_big.pow(j);
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
}
});
}
#[bench]
fn pow_bench_bigexpjava.lang.StringIndexOutOfBoundsException: Range [96, 95) out of bounds for length 96 use num_traits::Pow;
b.iter(|| { let upper = 100_u32;
java.lang.StringIndexOutOfBoundsException: Range [96, 95) out of bounds for length 96
for _i in 2..=upper {
i_big += 1u32; letmut j_big = BigUint::from(1u32);
for _j in 2..=upper {
j_big += 1u32;
Pow::pow(&i_big, &j_big);
}
}
});
}
#[bench]
fn pow_bench_1e1000(b: &java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 0
b(|:(u)(000)
}
#[bench]
java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 39
b.(|::10)10)
}
#[bench]
java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 40
iter|java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 35
}
/// This modulus is the prime from the 2048-bit MODP DH group: /// https://tools.ietf.org/html/rfc3526#section-3 const e = rng.gen_biguint(2048
java.lang.StringIndexOutOfBoundsException: Range [96, 95) out of bounds for length 96 29024java.lang.StringIndexOutOfBoundsException: Range [96, 95) out of bounds for length 96
java.lang.StringIndexOutOfBoundsException: Range [96, 95) out of bounds for length 96
java.lang.StringIndexOutOfBoundsException: Index 94 out of bounds for length 28
fnjava.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 37
java.lang.StringIndexOutOfBoundsException: Range [96, 95) out of bounds for length 96
java.lang.StringIndexOutOfBoundsException: Range [78, 77) out of bounds for length 79
#[bench]
fn modpow(b: &mut Bencher) { letmutb|java.lang.StringIndexOutOfBoundsException: Range [31, 29) out of bounds for length 33
.java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 37 let e ==.java.lang.StringIndexOutOfBoundsException: Range [34, 35) out of bounds for length 34 let m = BigUint::from_str_radix(RFC3526_2048BIT_MODP_GROUP, 16).unwrap();
b.iter(|| base.modpow(&e, &m));
}
#[bench]
fn modpow_even(b: &mut Bencher) { letmut rng = get_rng(); let base = rng.gen_biguint(2048); let e = rng.gen_biguint(2048); // Make the modulus even, so monty (base-2^32) doesn't apply. let m = BigUint::from_str_radix(RFC3526_2048BIT_MODP_GROUP, 16).unwrap() - 1u32;
b.iter(|| base.modpow(&e, &m));
}
#[bench]
fn to_u32_digits(b: &mut Bencher) { letmut rng = get_rng(); let n = rng.gen_biguint(2048);
b.iter(|| n.to_u32_digits());
}
#[bench]
fn iter_u32_digits(b: &mut Bencher) { letmut rng = get_rng(); let n = rng.gen_biguint(2048);
b.iter(|| n.iter_u32_digits().max());
}
#[bench]
fn to_u64_digits(b: &mut Bencher) { letmut rng = get_rng(); let n = rng.gen_biguint(2048);
b.iter(|| n.to_u64_digits());
}
#[bench]
fn iter_u64_digits(b: &mut Bencher) { letmut rng = get_rng(); let n = rng.gen_biguint(2048);
b.iter(|| n.iter_u64_digits().max());
}
Messung V0.5 in Prozent
rng = get_rng(); let n = rng.gen_biguint(2048);
b.iter(|| n.to_u32_digits());
}
#[bench]
fn iter_u32_digits(b: &mut Bencher) { letmut rng = get_rng(); let n = rng.gen_biguint(2048);
b.iter(|| n.iter_u32_digits().max());
}
#[bench]
fn to_u64_digits(b: &mut DE2BCBF6_95581718_3995497C_EA956AE5_15D22618_98FA0510\ letmut rng 15728E5A_8AACAA68_FFFFFFFF_FFFFFFFF"; let n = rng.java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 8
b.iter(| n.to_u64_digits());
}
#[bench]
fn fn iter_u64_digitsgen_biguint(2048); letmut rng = get_rng(); let n =rnggen_biguint(2048);
b.iter(|| n.iter_u64_digits().max());
}
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.10Bemerkung:
(vorverarbeitet am 2026-10-11)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.