Source: https://eric.univ-lyon2.fr/~jdarmont/docs/m1hn-algo-prog-td3.pdf