( hg2ecz | 2020. 03. 25., sze - 02:11 )

Ha benchmarkolás, nézzük, hogyan aránylanak az idők egymáshoz 300 millió iterációval:

A fordítandókat fordítsuk le:
$ gcc -O3 pi_c.c -o pi_c
$ rustc -O pi_rust.rs

Nem bízván a belső függvényekben, time parancs segítségével is ellenőriztem (real ...):

$ time ./pi_c
idő: 1578.992000 millisec
Pí közelítés: 3.14159265
real    0m1,582s

$ time ./pi_python.py        # PyPy dolgozott a lassú cPython interpreter helyett
2931.4085 millisec
Result:  3.1415926502560234
real    0m3,045s

$ time ./pi_lua.lua
1635.685    millisec
Result:     3.1415926569227
real    0m1,640s

$ time ./pi_rust
1598 millisec
Pí közelítés: 3.1415926502560234
real    0m1,602s

 

#include <stdio.h>
#include <time.h>

int main() {
    double result = 0.0; // összegváltozó
    double nevezo = 1.0; // nevező
    double sign = 1.0; // számláló

    clock_t CLOCK1 = clock();
    for(int i=0; i<300*1000*1000; i++) {
        result += sign/nevezo;
        nevezo += 2.0;
        sign = -sign;
    }
    clock_t CLOCK2 = clock();
    printf("idő: %f millisec\n", (CLOCK2 - CLOCK1)/1000.);
    printf("Pí közelítés: %.9g\n", 4.0 * result);

    return 0;
}

 

#!/usr/bin/pypy3

import time

result = 0.0
nevezo = 1.0
sign = 1.0

t0 = time.time() * 1000000
for n in range(300_000_000):
    result += sign/nevezo
    nevezo += 2.0
    sign = -sign
t1 = time.time() * 1000000

print ((t1 - t0) / 1000., 'millisec')
print ('Result: ', 4.0 * result)

 

#!/usr/bin/luajit

local result = 0.0
local nevezo = 1.0
local sign = 1.0

local t0 = os.clock() * 1000000
for n = 0, 300*1000*1000 do
    result = result + sign/nevezo
    nevezo = nevezo + 2.0
    sign = -sign
end
local t1 = os.clock() * 1000000

print ((t1 - t0)/1000., 'millisec')
print ('Result: ', 4.0 * result)

 

use std::time::Instant;

fn main() {
    let mut result = 0.0; // összegváltozó
    let mut nevezo = 1.0; // nevező
    let mut sign = 1.0; // számláló

    let t0 = Instant::now();
    for _i in 0..300_000_000 {
        result += sign / nevezo;
        nevezo += 2.;
        sign = -sign;
    }
    let elapsed_time = t0.elapsed();

    println!("{} millisec", elapsed_time.as_millis());
    println!("Pí közelítés: {}\n", 4.0 * result);
}