Source: https://hal.inria.fr/docs/00/81/84/10/PDF/2012Pean29824.pdf