4 ms·
Making them builtins allows them to work as you’d expect with cases like, func clamp(x float64) float64 { return max(0, min(1, x)) } With ordi
by klodolph 3y ago
Making them builtins allows them to work as you’d expect with cases like,
func clamp(x float64) float64 {
return max(0, min(1, x))
}
With ordinary functions, the arguments are assigned types too soon, and you get integer types for 0 and 1 in the above code. In C++ you might make the types explicit:
template<typename T>
T clamp(T x) {
return std::max<T>(0, std::min<T>(1, x));
}
That’s not meant to be exactly the way you’d write these functions, but just a little bit of sample code to show how the typing is different.
- Hakkin 3y agoThat doesn't seem to be true, unless I'm misunderstanding something. https://go.dev/play/p/ymM0tD3aGYg?v=gotip https://go.dev/play/p/ymM0tD3aGYg?v=gotip Obviously these sample functions don't take into account all the intricacies of float min/max functions.
- klodolph 3y agoYou can const x = min(a, b) assuming a and b are const.
- onionisafruit 3y agoI can't think of a use case for that. If all the inputs are consts, then you know the values and can just assign it to be the less of a or b. Am I missing something here?
- nordsieck 3y ago> I can't think of a use case for that. It helps to document intent. Probably not so useful for min, but it can be more useful for more complex functions.
- klodolph 3y agoConst are build-time constants, they are not necessarily the same value across all build configurations.
- onionisafruit 3y agoThat’s a good point.