I don't know what kind precision you want from ds18b20 but that is about normal, maxim specify +/- 0,5degC... I have quiet few of those chips: original from Dallas (now Maxim or Maxim integrated - or whatever they want to call them now...) and Chinese knockouts, all of them report temperature form 1 to 2,5deg different (usually higher by this 1 to 2,5degC - the ~ +2,5degC I got on Chinese parts). This probably is influenced by external heat sources like: voltage regulators, processors, your hand, or even sensor heat-up itself too, lying around phone and/or close wifi/bt/router antennas can introduce some errors to the analog and ADC circuit inside ds18b20 chip too...
The "reference" temperature sensor (thermometer) might be off too - unless you're using certified high precision thermometer.
I usually use 2 or 3 different sensors and calculate their mean temperature, e.g.:
(temperature from barometric sensor + temperature from humidity sensor + ds18b20 temperature) / 3 = mean temp.
Or jut use the approach as your already using: compensate temperature by adding/subtracting from result constant value - the simplest way and it should give your good results too.