Source: https://www.ippp.dur.ac.uk/~krauss/Lectures/NumericalMethods/IsingModel/Lecture/lecture.pdf