I have tested several simple functions with Golang and Java. To my 
surprise, Java sometimes is faster than Golang(especially in recursive 
function and some function in standard library such as math/rand.Rand). I 
wonder why. Here is some code I used for test and the result.

Golang code:

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func calPi(pointCount int) float64 {
    inCircleCount := 0

    var x, y float64
    var Pi float64

    for i := 0; i < pointCount; i++ {
        x = rand.Float64()
        y = rand.Float64()

        if x*x+y*y < 1 {
            inCircleCount++
        }
    }

    Pi = (4.0 * float64(inCircleCount)) / float64(pointCount)

    return Pi
}

func fibonacci(c int64) int64 {
    if c < 2 {
        return c
    }

    return fibonacci(c-2) + fibonacci(c-1)
}

func main() {
    rand.Seed(time.Now().Unix()) // 初始化随机数

    fmt.Printf("Test 1\n")

    startTime := time.Now()

    result := 0.0

    for i := 0.0; i < 1000000000; i = i + 1 {
        result += i * i
    }

    endTime := time.Now()

    fmt.Printf("Result: %v\n", result)

    fmt.Printf("Duration: %v\n", endTime.Sub(startTime))

    fmt.Printf("Test 2\n")

    startTime = time.Now()

    resultInt := fibonacci(50)

    endTime = time.Now()

    fmt.Printf("Result: %v\n", resultInt)

    fmt.Printf("Duration: %v\n", endTime.Sub(startTime))

    fmt.Printf("Test 3\n")

    startTime = time.Now()

    result = 0.0

    for i := 0.0; i < 100000000; i = i + 1 {
        result += rand.Float64()
    }

    endTime = time.Now()

    fmt.Printf("Result: %v\n", result)

    fmt.Printf("Duration: %v\n s", endTime.Sub(startTime))

    fmt.Printf("Test 4\n")

    startTime = time.Now()

    result = calPi(100000000)

    endTime = time.Now()

    fmt.Printf("Result: %v\n", result)

    fmt.Printf("Duration: %v s\n", endTime.Sub(startTime))

}


the result:

Test 1
Result: 3.333333328333552e+26
Duration: 1.449212507s
Test 2
Result: 12586269025
Duration: 1m31.645050682s
Test 3
Result: 4.999483069673434e+07
Duration: 2.534121566s
 sTest 4
Result: 3.14147056
Duration: 5.036491495s s

Java code:

public class Performance {

public static double calPi(int pointCount) {
int inCircleCount = 0;

double x, y;
double Pi;

for (int i = 0; i < pointCount; i++) {
x = Math.random();
y = Math.random();

if (x * x + y * y < 1) {
inCircleCount++;
}
}

Pi = (4.0 * inCircleCount) / pointCount;

return Pi;
}

public static double cal(double a, double b, double c) {
return a * b / (c + 1) + a;
}

public static long fibonacci(long c) {
if (c < 2)
return c;
return fibonacci(c - 2) + fibonacci(c - 1);
}

public static void main(String[] args) {

System.out.println("Test 1");

long startTime = System.currentTimeMillis();

double result = 0.0;

for (double i = 0.0; i < 1000000000; i = i + 1) {
result += i * i;
}

long endTime = System.currentTimeMillis();

float duration = (float) (endTime - startTime) / 1000;

System.out.println("Result: " + result);
System.out.println("Duration: " + duration + " s");

System.out.println("Test 2");

startTime = System.currentTimeMillis();

long resultInt = fibonacci(50);

endTime = System.currentTimeMillis();

duration = (float) (endTime - startTime) / 1000;

System.out.println("Result: " + resultInt);
System.out.println("Duration: " + duration + " s");

System.out.println("Test 3");

startTime = System.currentTimeMillis();

result = 0.0;

for (double i = 0; i < 100000000; i = i + 1) {
result += Math.random();
}

endTime = System.currentTimeMillis();

duration = (float) (endTime - startTime) / 1000;

System.out.println("Result: " + result);
System.out.println("Duration: " + duration + " s");

System.out.println("Test 4");

startTime = System.currentTimeMillis();

result = calPi(100000000);

endTime = System.currentTimeMillis();

duration = (float) (endTime - startTime) / 1000;

System.out.println("Result: " + result);
System.out.println("Duration: " + duration + " s");

}
}


result:

Test 1
Result: 3.333333328333552E26
Duration: 2.948 s
Test 2
Result: 12586269025
Duration: 60.816 s
Test 3
Result: 4.9999087237930864E7
Duration: 2.448 s
Test 4
Result: 3.14147284
Duration: 4.786 s


The difference of Test 2 results really shocked me!

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to