Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Функция RAND()

Ср июн 30, 2021 15:51:21

Среда MPLAB X IDE V5.15, XC8. Как-то раньше не замечал, а сейчас столкнулся с непоняткой. Вызываю встроенную функцию rand() для получения чисел нужного диапазона, например a=rand()%4+1 . Так вот если по модулю числа 2,4,8,16,32 и .т.д - всё отрабатывает нормально, если другие числа, то кроме чисел из нужного диапазона появляются числа "из концовки диапазона" , т.е. если, например байт как в данном случае, то это 253,254,255... Менял типы данных, изменял RAND_MAX в stdlib.h - всё равно ерунда..
Код:
for(int i=0;i<50;i++)     int r =rand()%4;

Изображение

Код:
for(int i=0;i<50;i++)     int r =rand()%5;

Изображение

Подскажите, что не так делаю.

Re: Функция RAND()

Чт июл 01, 2021 01:33:53

alfik777 писал(а):
Код:
for(int i=0;i<50;i++)     int r =rand()%5;
А где вывод на терминал ? Может там косяк ?
Слабо верится, что компилятор глючно вычисляет остаток от деления.

Добавлено after 11 minutes 20 seconds:

2021-07-01_01-31-40.png
(90.72 KiB) Скачиваний: 95

Re: Функция RAND()

Чт июл 01, 2021 08:29:22

Вывод в терминал просто не показал в коде, там все нормально. Я докопался до истины - может кому-то пригодится. Проблема оказалась в некорректной работе компилятора в стандарте C99. После установки С90 функция rand() стала нормально отрабатывать, правда появилось куча варнингов в программе, ведь стандарт C - C99 по умолчанию и всегда всё писалось под этот стандарт. Выкрутился так - стандарт оставил С99, а библиотеки линкера подключил от С90 (это всё можно выбрать в глобальных опциях проекта).
Ответить