Case distinction: proposed_split == fvalue versus proposed_split != fvalue

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);
}

https://github.com/dmlc/xgboost/blob/e6088366dfb4fb163f0cf6e946a2d087934743dd/src/tree/updater_colmaker.cc#L336-L343

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.

Please see https://github.com/dmlc/xgboost/pull/5010

Great thx. Seems that floating point errors are the reason.