difference between compile time error runtime error and logical error