Yes. When you a sync rate, you are advising DBPro that this is the rate you want to use, but DirectX may not be able to provide an exact match.
The way I use to get a closer sync rate is something like this :
global SyncTime as float
global SyncRate as float
SetSyncRate(27)
do
cls 0
text 0,0,str$(screen fps())
DoSync()
loop
function SetSyncRate(Rate as integer)
sync on
sync rate 0
SyncRate = 1000.0 / Rate
SyncTime = timer() + SyncRate
endfunction
function DoSync()
while timer() < SyncTime
endwhile
SyncTime = SyncTime + SyncRate
sync
endfunction
It's still not totally exact, but it's close enough for most things.