Calculations for Apex are correct, no question about it as it is based on a standard Source sensitivity.
It's either your sensor being slightly off (not uncommon), how you measure (25 cm is the entire width of your mousepad, so you have to measure with the sensor at the edges, not the actual mouse), human error or a combination of all of these. The best way to verify the sensitivity is with scripts or programs that simulate mouse movement, then you'll see that it is spot on.