Forth http://fforum.winglion.ru/ |
|
ограничения операции ABS (и NEGATE) http://fforum.winglion.ru/viewtopic.php?f=9&t=2027 |
Страница 1 из 1 |
Автор: | mOleg [ Вс мар 29, 2009 23:24 ] |
Заголовок сообщения: | ограничения операции ABS (и NEGATE) |
вот, столкнулся с тем, что ABS на значении 0x80000000(максимальное отрицательное число) ничего не делает, а по логике бы должен оказаться 0? В стандарте об этом ничего не сказано, и в Форт-системах тоже. Вот и думаю, описать ли это как фичу, либо исправлять ситуацию. По логике должно получиться число 1.0 (двойной длины) а значит 0 в младшем разряде |
Автор: | WingLion [ Пн мар 30, 2009 01:48 ] |
Заголовок сообщения: | |
Ситуация неисправима. Есть 2<sup>32</sup> чисел, кодируемых 32-битным значением. Из них 1 - ноль, 2<sup>31</sup> положительных и отрицательных взаимно "обратных" по операции NEGATE пар, и оставшееся одно число, не имеющее такой пары... в принципе... Так что, сей факт надо просто знать и понимать, когда в программе следует опасаться его проявления в виде глюка. Так же, как опасаться глюков от переполнения при сложении/вычитании/умножении/делении и т.д. и т.п. |
Автор: | mOleg [ Пн мар 30, 2009 01:53 ] |
Заголовок сообщения: | |
ну, что ж, сама проблема лежит в том, что после операции в краевом случае значение не помещается в разрядную сетку, а значит, это либо фича, либо баг в зависимости от идеалогии языка, потому что один ЯП может автоматом повысить разрядность числа, а другой проигнорировать сей факт. Посему пока для того, чтобы пользователи сей факт могли почерпнуть из документации, она (дока) дополнена. С другой стороны рука тянется написать 0x7FFFFFFF AND (то есть получить переполнение разрядной сетки), но это тоже будет фича. |
Автор: | Lethargeek [ Пн июн 22, 2009 05:11 ] |
Заголовок сообщения: | |
Просто считайте результат беззнаковым числом |
Автор: | mOleg [ Пн июн 22, 2009 12:31 ] |
Заголовок сообщения: | |
Lethargeek писал(а): Просто считайте результат беззнаковым числом
это в общем логично, но так не делают ни в Сях, ни в Форте обычно 8( собственно поэтому вопрос и возник. |
Автор: | Hishnik [ Пн июн 22, 2009 12:40 ] |
Заголовок сообщения: | |
Проблема лежит глубже языков программирования. Это вопросы представления чисел, они решаются сначала на "понятийном" уровне. Как решим трактовать 0x80000000, так и будет. А реализации языка останется это решение претворить в жизнь. |
Автор: | Mihail [ Вт июн 23, 2009 00:16 ] |
Заголовок сообщения: | |
mOleg писал(а): ама проблема лежит в том, что после операции в краевом случае значение не помещается в разрядную сетку, а значит, это либо фича, либо баг в зависимости от идеалогии языка
В документации обычно отмечен диапазон знаковых чисел от -2147483648 до 2147483647. Т.е. за изменения знака -2147483648 разработчики ответственности не несут. |
Автор: | simne [ Вт июн 23, 2009 01:47 ] |
Заголовок сообщения: | |
Mihail писал(а): В документации обычно отмечен диапазон знаковых чисел от -2147483648 до 2147483647.
Кстати не такая уж большая цифра.. Была на эту тему хохма, что мол 64 бита на персоналках решили ввести когда стало невозможно 32 битами представить капитал БГ с достаточной точностью Блин, где российские 64-битовые процессоры? |
Автор: | Wlad [ Вт июн 23, 2009 11:18 ] |
Заголовок сообщения: | |
В Белоруссии спросите... |
Автор: | Alexander [ Ср июн 24, 2009 23:45 ] |
Заголовок сообщения: | |
Блин, Люди, а DNEGATE КТО-НИТЬ ВСПОМНИЛ? просто вот он и должен переносить в старшую часть единицу, а так она должна остаться в флаге переноса и кто помнит? |
Автор: | mOleg [ Чт июн 25, 2009 17:16 ] |
Заголовок сообщения: | |
Alexander писал(а): Блин, Люди, а DNEGATE КТО-НИТЬ ВСПОМНИЛ?
просто вот он и должен переносить в старшую часть единицу, а так она должна остаться в флаге переноса и кто помнит? вопрос-то в другом вы же не станете автоматически увеличивать разрядную сетку (по крайней мере в форте) |
Автор: | WingLion [ Чт июн 25, 2009 21:32 ] |
Заголовок сообщения: | |
Tема про 64-битные процессоры oтделена сюда: http://fforum.winglion.ru/viewtopic.php?t=2158 |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |