今まで線形補間は次のように書いていた。
float lerp(float start, float end, float t) { return start + t * (end - start); }
しかし、この場合だと、tが1のときに浮動小数点数の計算誤差でendの値とならないことがある。
ということで、次のように書くべき。
float lerp(float start, float end, float t) { return (1 - t) * start + t * end; }
こちらならば、tが1のときにendの値となる。
Linear interpolation - Wikipedia
英語版Wikipediaの線形補間の項目を見ていて初めて知った。
まあ、いままでそこまで厳密な計算が必要な場合は無かったので問題にはならなかったが。