Hacker News new | ask | show | jobs
by klodolph 1100 days 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.
1 comments

That doesn't seem to be true, unless I'm misunderstanding something. 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.

You can

    const x = min(a, b)
assuming a and b are const.
I 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?
Const are build-time constants, they are not necessarily the same value across all build configurations.
That’s a good point.
> 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.