The first approach would be:
Max@Cases[tab, Except[Indeterminate]]
3.
If I understand your second need, that would be:
tab /. Indeterminate -> 0.0
{1., 2., 3., 0.}
Edit
Oleksandr's approach is indeed very fast, for very long lists seems to be over 3-4 times faster then others. Since my first approach was quite straightforward, it is resonable to add another one obvious method which will be very handy (possibly the fastest) when we work with non-numeric lists :
Max@DeleteCases[l, Indeterminate]
This approach is only a bit slower for numeric lists than that by Oleksandr and probably the best for non-numeric data (when Indeterminates are exceptional cases rather than common).
To test prerformance issues we take a slightly more natural data, namely lists of real numbers with appended Indeterminate
's :
l = RandomChoice[RandomReal[100, 20000]~Append~Indeterminate, {10^7}];
and use AbsoluteTimings
to compare methods, starting with the most efficient :
maxNoIndeterminate[l] // AbsoluteTiming (*Oleksandr*)
{0.7070000, 99.9945}
Max@DeleteCases[l, Indeterminate] // AbsoluteTiming (*Artes II *)
{1.1150000, 99.9945}
Max@Cases[l, Except[Indeterminate]] // AbsoluteTiming (*Artes I *)
{2.7720000, 99.9945}
Max[l /. Indeterminate -> -Infinity] // AbsoluteTiming (*cormullion*)
{2.8870000, 99.9945}
Max@Select[l, NumberQ] // AbsoluteTiming (*David Skulsky*)
{3.5120000, 99.9945}