# Define a more generic meaning for `typemin`/`typemax`

`typemin(T)` says

The lowest value representable by the given (real) numeric DataType T.

Suppose we want to be more generic than a “(real) numeric” datatype. What should it say then?

The minimum value representable by the given `DataType` having a unique minimum value.

one might think from the docstring that

``````typemin(::T)
``````

returns value `v` such that

``````min(v, w) == v
``````

for all `w` where `typeof(w) <: T`

however unfortunately this isn’t always true…

Could we use `isless`? Is this accurate?

The lowest value representable by the DataType `T` as ordered by `[`isless`](@ref)`; this value `isless` than all other values of type `T`.

1 Like

it would have to be `isless || isequal`

What’s an example of a datatype with multiple equal `typemin` values?

Conversely, defining `typemax` as

The highest value representable by the DataType `T` as ordered by `[`isless`](@ref)`; this value `isless` than no other values of type `T`.

seems obvious but breaks in the presence of NaN.

``````julia> isless(typemax(Float64), NaN)
true
``````
1 Like

good point, nvm
was trying to construct something with subnormals but they don’t work like I thought

but still, it’s not true for `DateTime` as noticed by @Sukera `typemin`/`typemax` of `DateTime` is not actually the smallest/largest representable `DateTime` · Issue #50931 · JuliaLang/julia · GitHub

1 Like

I believe the proper predicate is typemax(T) means that !exists x such that `isless(typemax(T), x)`

1 Like
``````julia> isless(typemax(Float64), NaN)
true
``````

Can we say “… in the well ordered subset of values of `T`” or something like that?

Yes (I think that’s equivalent to what I wrote above, but it’s late). `x = NaN` exists anyways.