https://levelup.gitconnected.com/50-mathematical-concepts-for-better-programming-part-12-5ddb98bd7398