https://levelup.gitconnected.com/50-mathematical-concepts-for-better-programming-part-13-ecc6484cdcdc