[c.math.lerp] # 29 Numerics library [[numerics]](./#numerics) ## 29.7 Mathematical functions for floating-point types [[c.math]](c.math#lerp) ### 29.7.4 Linear interpolation [c.math.lerp] [🔗](#lib:lerp) `constexpr floating-point-type lerp(floating-point-type a, floating-point-type b, floating-point-type t) noexcept; ` [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/numerics.tex#L9910) *Returns*: a+t(b−a)[.](#1.sentence-1) [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/numerics.tex#L9914) *Remarks*: Let r be the value returned[.](#2.sentence-1) If isfinite(a) && isfinite(b), then: - [(2.1)](#2.1) If t == 0, then r == a[.](#2.1.sentence-1) - [(2.2)](#2.2) If t == 1, then r == b[.](#2.2.sentence-1) - [(2.3)](#2.3) If t >= 0 && t <= 1, then isfinite(r)[.](#2.3.sentence-1) - [(2.4)](#2.4) If isfinite(t) && a == b, then r == a[.](#2.4.sentence-1) - [(2.5)](#2.5) If isfinite(t) || !isnan(t) && b - a != 0, then !isnan(r)[.](#2.5.sentence-1) Let *CMP*(x,y) be 1 if x > y,-1 if x < y, and 0 otherwise[.](#2.sentence-3) For any t1 and t2, the product of*CMP*(lerp(a, b, t2), lerp(a, b, t1)),*CMP*(t2, t1), and*CMP*(b, a) is non-negative[.](#2.sentence-4)