Polynom

Ce comparatif de performances calcule 500000 fois un polynôme de 100 termes. Il est répété dix fois.

Resultats

La durée de l'éxécution est la durée utilisateur ajoutée à celle du système, comme renvoyée par la commande bash "time".

Python Perl Gambas
Durée d'éxécution 133 s 319 s 100 s
Par rapport à Python 100 % 239 % 75 %
Par rapport à Perl 42 % 100 % 31 %
Par rapport à Gambas 133 % 318 % 100 %

code source Python

#!/usr/bin/python

n = 500000
x = 0.2

def t(x):
    mu = 10.0
    pu = 0.0
    pol = [0] * 100
    r = range(0,100)

    for i in range(0,n):
        for j in r:
            pol[j] = mu = (mu + 2.0) / 2.0
        su = 0.0
        for j in r:
            su = x * su + pol[j]
        pu = pu + su
    return pu

for i in range(0,10):
  print t(x)

code source Perl

#!/usr/bin/perl -w

use strict;

sub poly($)
\{
  my $n = 500000;
  my $x = $_[0];

  my $mu = 10;
  my $pu = 0;

  my @pol;

  foreach (0 .. $n - 1) {
      foreach (0 .. 99) {
	  $pol[$_] = $mu = ($mu + 2) / 2;
      }

      my $s = 0;
      foreach (0 .. 99) {
	  $s = $x * $s + $pol[$_];
      }

      $pu += $s;
  }

  return $pu;
}

my $res;
for (1..10) {
    $res = poly(0.2);
    print "$res\n";
    }

code source Gambas

#!/usr/bin/env gbs3

Sub Test(X As Float) As Float

  Dim Mu As Float = 10.0
  Dim Pu, Su As Float
  Dim I, J, N As Integer
  Dim aPoly As New Float[100]

  N = 500000

  For I = 0 To N - 1
    For J = 0 To 99
      Mu =  (Mu + 2.0) / 2.0
      aPoly[J] = Mu
    Next
    Su = 0.0
    For J = 0 To 99
      Su = X * Su + aPoly[J]
    Next
    Pu += Su
  Next

  Return Pu

End

Dim I as Integer

For I = 1 To 10
  Print Test(0.2)
Next