Автор |
Сообщение |
09.09.2011 21:37:50
Тема: Re:Вопросы по C-MPA
|
Сергей Лопухов
Темы: 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 считает правильно, а если любое другое число - то нет.
|
11.09.2011 18:28:56
Тема: Re:Вопросы по C-MPA
|
Сергей Лопухов
Темы: 0
Сообщений: 19
Мой профиль
|
Вот ещё на раздумье:
int __out __bits(16) a;
void main() {
a=(-3+0)/3;
} На выходе a=-00001 !!!
|
11.09.2011 19:23:55
Тема: Re:Вопросы по C-MPA
|
Михаил Долинский
Темы: 2072
Сообщений: 49883
Мой профиль
|
Так и должно быть!
Разве нет? Почему?
|
12.09.2011 12:00:12
Тема: Re:Вопросы по C-MPA
|
Сергей Лопухов
Темы: 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
|
12.09.2011 12:14:14
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Сергей Лопухов:
int __out __bits(16) a;
void main() {
a=(0-3)/3;
} На выходе a=+21844
Эта ошибка будет исправлена в ближайшее время.
|
12.09.2011 12:23:08
Тема: Re:Вопросы по C-MPA
|
Сергей Лопухов
Темы: 0
Сообщений: 19
Мой профиль
|
Пока такой костыль: если есть конструкция вида: (Выражение_1)/(Выражение_2) и при этом Выражение_1 и/или Выражение_2 могут принимать отрицательные значения, писать:
(-1+1+Выражение_1)/(-1+1+Выражение_2)
или ещё проще:
(-0+Выражение_1)/(-0+Выражение_2)
|
13.09.2011 12:51:28
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Сергей Лопухов:
int __out __bits(16) a;
void main() {
a=(0-3)/3;
} На выходе a=+21844
Исправлено.
|
13.10.2011 10:00:12
Тема: Re:Вопросы по C-MPA
|
Сергей Песляк
Темы: 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);
}
|
14.10.2011 18:38:25
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 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);
}
Исправлено.
|
17.02.2012 19:11:41
Тема: Re:Вопросы по C-MPA
|
Павел Шкуринов
Темы: 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 ответ выдает правильный.
|
17.02.2012 19:38:51
Тема: Re:Вопросы по C-MPA
|
Артём Ярош
Темы: 0
Сообщений: 70
Мой профиль
|
Была аналогичная проблема. Решил заменой условий на такие
if(in_0+in_1==2) b++;
|
18.02.2012 10:33:14
Тема: Re:Вопросы по C-MPA
|
Михаил Долинский
Темы: 2072
Сообщений: 49883
Мой профиль
|
А Слава Кацубо так написал
if(in_14&in_15) y++;
Получается, что такое условие
if(in_18==1 && in_19==1) a++;
Настолько медленнее вычисляется (больше операций), что сгенерированная схема не успевает отработать за отведенное время на тест.
|
18.02.2012 15:11:59
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Михаил Долинский:
А Слава Кацубо так написал
if(in_14&in_15) y++;
Получается, что такое условие
if(in_18==1 && in_19==1) a++;
Настолько медленнее вычисляется (больше операций), что сгенерированная схема не успевает отработать за отведенное время на тест.
Вариант Кацубо самый быстрый. Другие работают примерно в 1.5-3 раза дольше.
Увеличил в этой задаче задержку перед проверкой выходных контактов.
|
21.02.2012 12:54:07
Тема: Re:Вопросы по C-MPA
|
Вячеслав Кацубо
Темы: 2
Сообщений: 60
Мой профиль
|
В винтере неверно обрабатывается команда 1<<2+1 - приоритет должен быть у << а не у + - обрабатывается как 1<<(2+1) хотя должно (1<<2)+1
|
21.02.2012 15:16:43
Тема: Re:Вопросы по C-MPA
|
Игорь Коршунов
Темы: 7
Сообщений: 2198
Мой профиль
|
Вячеслав Кацубо:
В винтере неверно обрабатывается команда 1<<2+1 - приоритет должен быть у << а не у + - обрабатывается как 1<<
(2+1) хотя должно (1<<2)+1
Сложение имеет более высокий приоритет, чем сдвиг.
http://vadox.org.ua/prilogeniya/operator_prec
|
|