Это значит ошибка прямых вычислений в свиче, в частности RND. Но это ни как не говорит о том, что значение вычисляется каждый раз на каждом CASE. Об этом говорит и показанный выше тест.
Здесь проблема в другом.
Вот такие прямые вычисления в свиче проходят нормально
FOR($i=0, $i < 30)
SWITCH($i - INT($i/2)*2)
CASE(0)
LOGWRITE("0")
CASE(1)
LOGWRITE("1")
DEFAULT
LOGWRITE("Err")
END_SWITCH
END_CYC
HALT
Результат:
11:20:48 0
11:20:48 1
11:20:48 0
11:20:48 1
...
Предварительный вывод (возможно ошибочный). Большинство функций RND - выдающих целочисленные значения или из списка, базируются на базовой функции выдающей значения в диапазоне 0 <= N <= 1 в виде числа с плавающей точкой. А потом уже это число переводится в нужный диапазон от и до с переводом в целое.
При приравнивании результата RND(1,3) переменной, перевод в целое осуществляется правильно.
В свитче, возможно проблемы с округлением и получается что-то вида 2.00000000001 что не равно целым 2 в Case когда значения 0 <= N <= 1 близки к переходным.
Может всё, что я написал - полная шляпа