On Sunday, 24 March 2024 at 19:31:19 UTC, Csaba wrote:
I know that benchmarks are always controversial and depend on a
lot of factors. So far, I read that D performs very well in
benchmarks, as well, if not better, as C.
I wrote a little program that approximates PI using the Leibniz
formula. I implemented the same thing in C, D and Python, all
of them execute 1,000,000 iterations 20 times and display the
average time elapsed.
Here are the results:
C: 0.04s
Python: 0.33s
D: 0.73s
What the hell? D slower than Python? This cannot be real. I am
sure I am making a mistake here. I'm sharing all 3 programs
here:
C: https://pastebin.com/s7e2HFyL
D: https://pastebin.com/fuURdupc
Python: https://pastebin.com/zcXAkSEf
Usually you do not translate mathematical expressions directly
into code:
```
n += pow(-1.0, i - 1.0) / (i * 2.0 - 1.0);
```
The term containing the `pow` invocation computes the alternating
sequence -1, 1, -1, ..., which can be replaced by e.g.
```
immutable int [2] sign = [-1, 1];
n += sign [i & 1] / (i * 2.0 - 1.0);
```
This saves the expensive call to the pow function.