Λοιπόν έτοιμα τα αποτελέσματα!! Έγραψα ένα πρόγραμμα σε Fortran, C C++ και java που υπολογίζει πόσοι πρώτοι αριθμοί υπάρχουν μέχρι το 20 000 000
Τα έτρεξα από CLI για να μην "ενοχλείται" το pc μου με γραφικό περιβάλλον και μέτρησα (γύρω στις 5 φορές για το κάθε πρόγραμμα) το χρόνο που έκαναν να τελειώσουν.
Σας δίνω τους 4 κώδικες:
1.Fortran
- Κώδικας: Επιλογή όλων
PROGRAM SPEEDTEST
PRINT*, 'Give anything and press Ender to start'
READ*,
PRINT*, NUM()
END PROGRAM SPEEDTEST
INTEGER FUNCTION NUM()
INTEGER N,SQ,D,RET
LOGICAL DIV
N=1
RET=1
SQ=0
DO WHILE(N<20000000)
DIV=.FALSE.
N=N+2
IF (MOD(N,2)==0) CYCLE
D=1
SQ= NINT(SQRT(REAL(N)))
DO WHILE(D<=SQ)
D=D+2
IF(MOD(N,D)==0) THEN
DIV=.TRUE.
EXIT
END IF
END DO
IF (.NOT.DIV) RET=RET+1
END DO
NUM = RET
RETURN
END FUNCTION NUM
2. C
- Κώδικας: Επιλογή όλων
#include <math.h>
#include<stdio.h>
int num(void);
int N,sq,d;
char ch;
unsigned int div;
int main() {
printf ("Give anything and press Ender to start\n");
scanf("%c", &ch);
printf ("%d\n",num());
return 0;
}//main
int num() {
N=1;
int ret=1;
A: while(N<20000000) {
div=0;
N+=2;
if(N%2==0) continue;
d=1;
sq = (int)sqrt(N);
while(d<=sq) {
d+=2;
if(N%d==0) {
div=1;
break;
}//if
}//while
if(!div) ret++;
}//while
return ret;
}//work
3. C++
- Κώδικας: Επιλογή όλων
#include <iostream>
#include <cmath>
using namespace std;
int N,sq,d;
char ch;
bool div;
int num();
int main() {
cout << "Give anything and press Ender to start\n";
cin >> ch;
cout << num()<<endl;
return 0;
}//main
int num() {
N=1;
int ret=1;
A: while(N<20000000) {
div=false;
N+=2;
if(N%2==0) continue;
d=1;
sq = (int)sqrt(N);
while(d<=sq) {
d+=2;
if(N%d==0) {
div=true;
break;
}//if
}//while
if(!div) ret++;
}//while
return ret;
}//work
4. Java
- Κώδικας: Επιλογή όλων
import java.util.*;
public class SpeedTest{
static int N,sq,d;
static boolean div;
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("Give anything and press Ender to start");
sc.next();
System.out.printf("%d\n",num());
}//main
static int num(){
N=1;
int ret=1;
while(N<20000000) {
div=false;
N+=2;
if(N%2==0) continue;
d=1;
sq = (int)Math.sqrt(N);
while(d<=sq) {
d+=2;
if(N%d==0) {
div=true;
break;
}//if
}//while
if(!div) ret++;
}//while
return ret;
}//num
}//class
Και στις 4 περιπτώσεις όλη η δουλειά γίνεται στη συνάρτηση num() η οποία είναι μεταφρασμένη στις 4 γλώσσες "εντολή προς εντολή" όσο είναι αυτό δυνατόν.
Επίσης να τονίσω ότι τα αποτελέσματα έχουν να κάνουν
με την συγκεκριμένη διεργασία και δεν πρέπει να γενικεύονται. Για κάτι άλλο η σειρά μπορεί να είναι άλλη!
Παραθέτω λοιπόν τα εξής ενδιαφέροντα:
Fortran: 36.0 sec (εκτελέσιμο compiled σε gfortran)
C: 37.2 sec (εκτελέσιμο compiled σε gcc)
C++: 39.2 sec (εκτελέσιμο compiled σε g++)
Java: 39.6 sec (class αρχείο compiled σε open-jdk 6)
Java: 42.5 sec (εκτελέσιμο αρχείο compiled σε gcj)
Όλα τα εκτελέσιμα ήταν striped...
Τα συμπεράσματα που εγώ βγάζω είναι τα εξής: Η Fortran παραμένει η γρηγορότερη παρ ότι έρχεται απο την εποχή των σπηλαίων

Η Java ήταν ΠΟΛΥ κοντά στην c++, και μάλλιστα κάποιες μετρήσεις της Java είχαν και μικρότερους χρόνους από κάποιες της c++ (τα παραπάνω είναι μέσες τιμές).
Στην συγκεκριμένη εφαρμογή η c++ αποδείχθηκε γρηγορότερη κατά 1%, άρα είναι τουλάχιστον υπερβολικό να λέμε ότι η Java είναι
απελπιστικά αργή (για να μην πω προκατειλημμένο..). ας μην ξεχνάμε άλλωστε ότι ο ρόλος της Java δεν είναι να ψάχνει πρώτους αριθμούς, παρ όλα αυτά στο "εκτός έδρας" παιχνίδι τα πήγε πολύ καλά!
Τέλος το gcj εκτελέσιμο έπασχε σε ταχύτητα (αν και σε άλλες εφαρμογές που το δοκίμασα ήταν και πιο γρήγορο από το class, και σποραδικά ξεπερνούσε και τη c++)...
Τελικό συμπέρασμα είναι το εξής: καμία γλώσσα δεν ήταν και ΤΟΣΟ γρηγορότερη από τις άλλες - διαφορές της τάξςως του 6.5% δεν είναι και τίποτα σπουδαίο.. Άρα ο καθένας ας χρησιμοποιεί τη γλώσσα που τον κάνει να νοιώθει πιο άνετα την ώρα που προγραμματίζει! Εγώ προσωπικά συνεχίζω να ασχολούμαι με την java γιατί ειλικρινά με βολεύει πολύ ο τρόπος που φτιάχνει gui εφαρμογές, και παράλληλα μαθαίνω και άλλες γλώσσες για να διευρύνω τις γνώσεις μου...
Αυτά

Γνώσεις ⇛ Linux: Μέτριο┃ Προγραμματισμός: Java, Assembly, Fortran, μαθαίνω C/X11┃ Αγγλικά: Μέτρια
Λειτουργικό σε Η/Υ ϰ μοντέλο: Ubuntu 14.04 64-bit ┃ Τρόπος εγκατάστασης: Live USB
Προδιαγραφές ⇛ Desktop: Intel i5 2320 3.00GHz.┃ MotherBoard: Asus p8h61 -m pro
Προδιαγραφές ⇛ RAM: 4GB ┃ Τροφοδοτικό Corsair CX430
GPU: Intel 2nd Generation Core Processor Family Integrated Graphics Controller [8086:0102] {i915}
5 eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller [10ec:8168] (rev 06) ⋮ wlan0: 0b05:1723 ASUS WL-167G v2 802.11g Adapter [Ralink RT2571W]
Οθόνη Schaub Lorenz (Tv)