Функция RAND()

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
alfik777
Родился
Сообщения: 15
Зарегистрирован: Вс фев 09, 2014 13:25:40
Контактная информация:

Функция RAND()

Сообщение alfik777 »

Среда 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;
Изображение

Подскажите, что не так делаю.
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

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 КБ) 169 скачиваний
Реклама
alfik777
Родился
Сообщения: 15
Зарегистрирован: Вс фев 09, 2014 13:25:40
Контактная информация:

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

Сообщение alfik777 »

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

Вернуться в «PIC»