https://levelup.gitconnected.com/50-mathematical-concepts-for-better-programming-part-14-2e56f3c5a8ae