more precise calculation, hehe