xとyが nearly equal の時に z=x-y を計算してzを使う処理を行っていたりしませんか?
または,オーダーのかなり違うもの同士に対して加減算をしているとか?

もし,倍精度に(オプションで対応するのでなく)書き換えるなら,if(x.gt.1.0) では 1.0は単精度のままなので,if(x.gt.1d0) にしないと微妙なところで結果が変わることがあります.