[Logo] Форум DL
  [DL]  На главную страницу 
Индекс форума ->Учебный процесс ГГУ/СШ 27 ->Проектирование цифровых систем 1, 2, 3, ... 5, 6, 7, 8, 9, ... 26, 27, 28
Автор Сообщение
Сергей Лопухов

Темы: 0
Сообщений: 19

Мой профиль
Вот нашёл интересный баг в WInter (build 926, версия за 14.04.2011), связанный с делением:
int __out __bits(16) a;
void main() {
  a=(-3)/3;
}
На выходе a=-00001



int __out __bits(16) a;
void main() {
  a=(0-3)/3;
}
На выходе a=+21844

Дальнейшие "пляски с бубном" выявили следующую закономерность: если на месте "3" стоит степень двойки, то WInter считает правильно, а если любое другое число - то нет.
Сергей Лопухов

Темы: 0
Сообщений: 19

Мой профиль
Вот ещё на раздумье:
int __out __bits(16) a;
void main() {
  a=(-3+0)/3;
}
На выходе a=-00001 !!!
Михаил Долинский

Темы: 2072
Сообщений: 49883

Мой профиль
Так и должно быть!
Разве нет? Почему?
Сергей Лопухов

Темы: 0
Сообщений: 19

Мой профиль


Михаил Долинский:

Так и должно быть!
Разве нет? Почему? 
Пример относился к моему предыдущему сообщению.

Вот:

    (-3)/3=-00001
  (0-3)/3=+21844
(-3+0)/3=-00001

    (-4)/4=-00001
  (0-4)/4=-00001
(-4+0)/4=-00001


    3/(-3)=-00001
  3/(0-3)=+00000
3/(-3+0)=-00001

    4/(-4)=-00001
  4/(0-4)=+00000
4/(-4+0)=-00001
Игорь Коршунов

Темы: 7
Сообщений: 2198

Мой профиль


Сергей Лопухов:


int __out __bits(16) a;
void main() {
  a=(0-3)/3;
}
На выходе a=+21844
 

Эта ошибка будет исправлена в ближайшее время.
Сергей Лопухов

Темы: 0
Сообщений: 19

Мой профиль
Пока такой костыль: если есть конструкция вида: (Выражение_1)/(Выражение_2) и при этом Выражение_1 и/или Выражение_2 могут принимать отрицательные значения, писать:
(-1+1+Выражение_1)/(-1+1+Выражение_2)
или ещё проще:
(-0+Выражение_1)/(-0+Выражение_2)
Игорь Коршунов

Темы: 7
Сообщений: 2198

Мой профиль


Сергей Лопухов:

int __out __bits(16) a;
void main() {
  a=(0-3)/3;
}
На выходе a=+21844
 

Исправлено.
Сергей Песляк

Темы: 0
Сообщений: 11

Мой профиль
Савицкий(ПО-31),Песляк(ПО-31).
Ошибка в задаче --> Командные олимпиады\Контрольные срезы\30\п30

Ошибка компилятора:
"13.10 09:30
Задача №30 [test1]: Ошибка компиляции (mpc): Ошибка компилятора."

Наш исходник:
int __in __bits(16) A;
int __in __bits(16) B;
int __in __bits(16) C;
int __in __bits(16) D;

int __out __bits(16) RES;

void main()
{
if (A==B) RES=A+C*D/(A+B+1);
if (A>B) RES=A/B-(B*C-D*A)*(A+C);
if (A<B) RES=(A-2*C/D-B)*(C*B-A-B/D);
}
Игорь Коршунов

Темы: 7
Сообщений: 2198

Мой профиль


Сергей Песляк:

Савицкий(ПО-31),Песляк(ПО-31).
Ошибка в задаче --> Командные олимпиады\Контрольные срезы\30\п30

Ошибка компилятора:
"13.10 09:30
Задача №30 [test1]: Ошибка компиляции (mpc): Ошибка компилятора."

Наш исходник:
int __in __bits(16) A;
int __in __bits(16) B;
int __in __bits(16) C;
int __in __bits(16) D;

int __out __bits(16) RES;

void main()
{
if (A==B) RES=A+C*D/(A+B+1);
if (A>B) RES=A/B-(B*C-D*A)*(A+C);
if (A<B) RES=(A-2*C/D-B)*(C*B-A-B/D);


Исправлено.
Павел Шкуринов

Темы: 0
Сообщений: 30

Мой профиль
Не проходит тест в задаче http://dl.gsu.by/task.jsp?nid=914572&cid=813

Мое решение:
void main()
{
unsigned __bits(3) b;
unsigned __bits(3) a;
a=0;
b=0;
if(in_0==1 && in_1==1) b++;
if(in_2==1 && in_3==1) b++;
if(in_4==1 && in_5==1) b++;
if(in_6==1 && in_7==1) b++;
if(in_8==1 && in_9==1) b++;
if(in_10==1 && in_11==1) a++;
if(in_12==1 && in_13==1) a++;
if(in_14==1 && in_15==1) a++;
if(in_16==1 && in_17==1) a++;
if(in_18==1 && in_19==1) a++;
if(b>a)
{
out_0=1;
out_1=0;
out_2=0;
}
else if(a>b)
{
out_0=0;
out_1=0;
out_2=1;
}
else
{
out_0=0;
out_1=1;
out_2=0;
}
}

Ошибка на втором тесте. Когда проверяю вручную на HLCCAD ответ выдает правильный.
Артём Ярош

Темы: 0
Сообщений: 70

Мой профиль
Была аналогичная проблема. Решил заменой условий на такие
if(in_0+in_1==2) b++;
Михаил Долинский

Темы: 2072
Сообщений: 49883

Мой профиль
А Слава Кацубо так написал
if(in_14&in_15) y++;


Получается, что такое условие
if(in_18==1 && in_19==1) a++; 

Настолько медленнее вычисляется (больше операций), что сгенерированная схема не успевает отработать за отведенное время на тест.
Игорь Коршунов

Темы: 7
Сообщений: 2198

Мой профиль


Михаил Долинский:

А Слава Кацубо так написал
if(in_14&in_15) y++;


Получается, что такое условие
if(in_18==1 && in_19==1) a++; 

Настолько медленнее вычисляется (больше операций), что сгенерированная схема не успевает отработать за отведенное время на тест.  


Вариант Кацубо самый быстрый. Другие работают примерно в 1.5-3 раза дольше.

Увеличил в этой задаче задержку перед проверкой выходных контактов.
Вячеслав Кацубо

Темы: 2
Сообщений: 60

Мой профиль
В винтере неверно обрабатывается команда 1<<2+1 - приоритет должен быть у << а не у + - обрабатывается как 1<<(2+1) хотя должно (1<<2)+1
Игорь Коршунов

Темы: 7
Сообщений: 2198

Мой профиль


Вячеслав Кацубо:

В винтере неверно обрабатывается команда 1<<2+1 - приоритет должен быть у << а не у + - обрабатывается как 1<<
(2+1) хотя должно (1<<2)+1 

Сложение имеет более высокий приоритет, чем сдвиг.
http://vadox.org.ua/prilogeniya/operator_prec
 
Индекс форума ->Учебный процесс ГГУ/СШ 27 ->Проектирование цифровых систем 1, 2, 3, ... 5, 6, 7, 8, 9, ... 26, 27, 28
Time:0,053