never underestimate a jit

This commit is contained in:
nora 2021-06-06 21:08:22 +02:00
parent 44de39a2a5
commit a8eacce3c8
4 changed files with 18 additions and 10 deletions

View file

@ -3,7 +3,10 @@
Find all primes from 0 to 10 000 000. Find all primes from 0 to 10 000 000.
Printing time is not included. Printing time is not included.
There are probably some issues in the code since this result seems a bit *questionable*
| Language | Time | | Language | Time |
| ---------| -------| | ---------| -------|
| Java | 1836ms | | Java | 1836ms |
| Javascript | 1778.2ms | | Javascript | 1778.2ms |
| Rust | 1818ms |

View file

@ -9,6 +9,8 @@ for (let i = 0; i < 10; i++) {
times.push(totalTime); times.push(totalTime);
} }
console.assert(primes(10_000_000).length === 664_579);
const average = times.reduce((a, b) => a + b, 0) / times.length; const average = times.reduce((a, b) => a + b, 0) / times.length;
console.log(`Average time was ${average}ms`) console.log(`Average time was ${average}ms`)

View file

@ -6,4 +6,10 @@ edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
[profile.dev]
opt-level = 3
[profile.release]
opt-level = 3

View file

@ -3,14 +3,17 @@ use std::time::{SystemTime};
fn main() { fn main() {
let mut times = Vec::new(); let mut times = Vec::new();
for i in 0..10 { for i in 0..2 {
println!("Starting run {}", i); println!("Starting run {}", i);
let start = SystemTime::now(); let start = SystemTime::now();
let _ = primes(10_000_000); let _ = primes(10_000_000);
let time = start.elapsed().unwrap().as_millis(); let time = start.elapsed().unwrap().as_millis();
times.push(time); times.push(time);
} }
assert_eq!(primes(10_000_000).len(), 664_579);
let average = times.iter().sum::<u128>() / times.len() as u128; let average = times.iter().sum::<u128>() / times.len() as u128;
println!("Took {}ms on average", average); println!("Took {}ms on average", average);
} }
@ -21,22 +24,16 @@ fn primes(max: usize) -> Vec<usize> {
primes_list.push(2); primes_list.push(2);
for i in 3..max { //go through all numbers for i in 3..max { //go through all numbers
let mut is_prime = true;
for prime in &primes_list { //test each number for prime in &primes_list { //test each number
if *prime > (i as f64).sqrt() as usize { if *prime > (i as f64).sqrt() as usize {
primes_list.push(i);
break; break;
} }
if i % prime == 0 { //i = test number, j = some known prime if i % prime == 0 { //i = test number, j = some known prime
is_prime = false;
break; break;
} }
} }
if is_prime {
primes_list.push(i);
}
} }
return primes_list; return primes_list;