I should think so.
In the case of the overused gravity down trace, I believe something near enough to the distance is usually already available.

Doubly erroneous. Ignore x2.
Code:
// C-Script
var ct_nResult  = 0;
var ct_nDist = 0;
var ct_nDistD = 2;  // default in ENTITY units
var ct_nMode = 0;
//...
// set ct_nMode ?
vec_set(temp, my.x);
ct_nDist = (my.max_z - my.min_z) * ct_nDistD;
temp.z -= ct_nDist;
ct_nResult = c_trace(my.x, temp, ct_nMode);
ct_nResult += (ct_nResult == 0) * ct_nDist;	// without if construct


If ignoring properly, this shouldn't be seen.
Code:
distance = c_trace(trace_from, trace_to, trace_mode);
distance += (distance == 0) * vec_dist(trace_from, trace_to);  // wasteful