A Comparison of C and Python
Python module/package imports for this chapter
import math
Comparing C and Python: computing the digits of pi
Leibniz series: $\pi/4 = 1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \cdots = \sum_{k=0} \frac{(-1)^k}{(2k+1)}$
%%file pi.c
#include <math.h>
#include <stdio.h>
int main(int argc,char **argv) {
int k;
double acc = 0.0;
for(k=0;k<10000;k++) {
acc = acc + pow(-1,k)/(2*k+1);
}
acc = 4 * acc;
printf("pi: %.15f\n",acc);
return 0;
}
Overwriting pi.c
!gcc -o pi pi.c -lm
instead of gcc pi.c then ./a.out The error you can see: error: ld returned 1 exit status is from the linker ld (part of gcc that combines the object files) because it is unable to find where the function pow is defined. Including math.h brings in the declaration of the various functions and not their definition. The def is present in the math library libm.a. You need to link your program with this library so that the calls to functions like pow() are resolved.
!./pi
pi: 3.141492653590034
In a python way
acc = 0.0
for k in range(10000):
acc = acc + pow(-1,k)/(2*k+1)
acc = 4 * acc
print("pi:",acc)
pi: 3.1414926535900345
In a more pythonic way
4*sum(pow(-1,k)/(2*k+1) for k in range(10000))
3.1414926535900345
With one line we got the same result: python is more synthetic and expressive