Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: искажение бита  (Прочитано 7563 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
kiv
Участник

ru
Offline Offline

« : 26-01-2009 14:33 » new

Нужно иввертировать бит:
Имитация искажения осуществляется путем моделирования случайного числа RANDOM, равномерно распределенного на интервале (0,1) и реализацией проверки условия:
   RANDOM < Pиск – произошло искажение бита.
   RANDOM > Pиск – не произошло искажения бита.
 Почему он ругается?
Код:
 
unsigned char ham_bits[12][2][7] = { 0 };
float P ;
 int col=0;

  for(i=0; i<12; ++i)
 {
        for ( q=0; i<2; ++j)
        {
              for ( j=0; i<7; ++j)
              {
                P = random(2);
                if(P<0.1)
          {   ham_bits[i][q][j]^=1; col++;  } /*[C++ Warning] Unit12.cpp(91): W8070 Function should return a value*/
               }
    }
  }

   std:: cout<<col<<endl;
Записан

сам задал вопрос, сам и ответил....
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 26-01-2009 14:46 » 

Компилятор что-то принимает за функцию. Всё приведённое - это код, вырезанный из какой-то функции? Или так и есть?
Кстати, насчёт RANDOM: у тебя интервал от 0 до 1, а генерируется для (0, 2)? (random - это, видимо, что-то Borland-специфичное - не помню, как оно работает)
Записан
kiv
Участник

ru
Offline Offline

« Ответ #2 : 26-01-2009 14:56 » 

Цитата
Header File

stdlib.h

Category

Math Routines

Prototype

int random(int num);

Description

Random number generator.

random returns a random number between 0 and (num-1). random(num) is a macro defined in stdlib.h. Both num and the random number returned are integers.

Return Value

random returns a number between 0 and (num-1).
Записан

сам задал вопрос, сам и ответил....
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 26-01-2009 15:00 » 

Ах, макрос... Ну, понятно. Только ведь он будет возвращать int - то есть, или 0, или 1, а не равномерно распределённое по (0,1). Наверное, в крайнем случае нужно random(MAX_INT)/static_cast<float>(MAX_INT) ?
Записан
kiv
Участник

ru
Offline Offline

« Ответ #4 : 26-01-2009 15:03 » 

точно, а мне нужно вещественное получить
random(MAX_INT)/static_cast<float>(MAX_INT) ?
что это?
Записан

сам задал вопрос, сам и ответил....
kiv
Участник

ru
Offline Offline

« Ответ #5 : 26-01-2009 17:55 » 

поменяла код Улыбаюсь
Код:
int col=0;  int P;
for (int i=0; i<7; ++i)
 {      P = random(101);
    if(P<10)
     {   ham_bits[i][0][i] ^=1;
            ham_bits[11-i][1][i]^=1; col++; }
 }
Записан

сам задал вопрос, сам и ответил....
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 26-01-2009 18:05 » 

точно, а мне нужно вещественное получить
random(MAX_INT)/static_cast<float>(MAX_INT) ?
что это?
это получение равномерно распределённых (0, 1) вещественных чисел, где MAX_INT - константа для максимальной (или просто достаточно большой) разрядности. Генерим число от 0 до MAX_INT и делим на MAX_INT.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines