Машинно-арифметическое
Dec. 3rd, 2014 08:50 pmОпишите реалистичную систему двоичной машинной арифметики без прерывания по переполнению, в которой нахождение максимального представимого целого со знаком с помощью кода на Си
int imax=0, next=1;
while (next > imax) {
imax = next;
next = next*2+1;
}не будет работать.Это система, у которой нет отдельного целочисленного арифметического устройства, а целые числа суть точно представленные числа с плавающей точкой, имеющие целое значение.
no subject
Date: 2014-12-04 05:23 am (UTC)no subject
Date: 2014-12-04 06:27 am (UTC)no subject
Date: 2014-12-04 08:06 am (UTC)no subject
Date: 2014-12-04 08:16 am (UTC)no subject
Date: 2014-12-04 08:22 am (UTC)no subject
Date: 2014-12-04 09:41 am (UTC)no subject
Date: 2014-12-04 08:24 am (UTC)no subject
Date: 2014-12-04 08:41 am (UTC)Максимальное значение 10000....0
Прыжки *2+1 приводят к 0111....1, следующий такой прыжок даст 1111...1 = -1, отрицательное число, поэтому алгоритм останавливается на 0111...1, но на самом деле максимальное целое значение на 1 больше.
no subject
Date: 2014-12-04 08:46 am (UTC)no subject
Date: 2014-12-04 06:01 pm (UTC)no subject
Date: 2014-12-04 06:11 pm (UTC)no subject
Date: 2014-12-04 06:56 pm (UTC)no subject
Date: 2014-12-04 07:11 pm (UTC)no subject
Date: 2014-12-04 07:14 pm (UTC)no subject
Date: 2014-12-04 06:12 pm (UTC)no subject
Date: 2014-12-04 06:25 pm (UTC)no subject
Date: 2014-12-04 06:52 pm (UTC)no subject
Date: 2014-12-04 07:18 pm (UTC)no subject
Date: 2014-12-04 08:11 am (UTC)no subject
Date: 2014-12-04 08:28 am (UTC)no subject
Date: 2014-12-04 09:38 am (UTC)no subject
Date: 2014-12-04 07:32 pm (UTC)no subject
Date: 2014-12-04 07:55 pm (UTC)no subject
Date: 2014-12-04 09:16 am (UTC)Насколько я понимаю логику оптимизаторов, ндёжнее использовать unsigned int (и приводить к int только при сравнении). А ещё лучше — взять INT_MAX. Но, боюсь, речь идёт не об int, а о каком-то специфическом типе, не имеющем беззнакового аналога (вроде uid_t)?
no subject
Date: 2014-12-04 06:20 pm (UTC)А ещё лучше — взять INT_MAX.
Речь идет о коде, тестирующем конформность реализаций (enquire.c)
о каком-то специфическом типе, не имеющем беззнакового аналога
Именно. У какого числового типа нет беззнакового аналога? :)
no subject
Date: 2014-12-04 09:23 pm (UTC)Оптимизаторы становятся всё умнее. Прятать переменную придётся очень хорошо и без гарантии, что оптимизатор следующей версии не найдёт.
> У какого числового типа нет беззнакового аналога?
Пример я привёл. Платформо-зависимый псевдоним, для которого даже неизвестно, знаковый он или нет.
no subject
Date: 2014-12-04 10:14 pm (UTC)Платформо-зависимый псевдоним, для которого даже неизвестно, знаковый он или нет.
Всё проще. :)
Извиняюсь за некропост
Date: 2015-01-05 01:21 pm (UTC)Re: Извиняюсь за некропост
Date: 2015-01-05 03:46 pm (UTC)