Can someone explain the reason for the following case distinction in the updater_colmaker.cc:
bst_float proposed_split = (fvalue + e.last_fvalue) * 0.5f;
if ( proposed_split == fvalue ) {
e.best.Update(loss_chg, fid, e.last_fvalue,
d_step == -1, c, e.stats);
} else {
e.best.Update(loss_chg, fid, proposed_split,
d_step == -1, c, e.stats);
}
Is this distinction necessary? proposed_split == fvalue can only be true if e.last_fvalue == fvalue. This means that in this case proposed_split == e.last_fvalue.