Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


Закрытая тема
Опции темы
Непрочитано 25.04.2013, 21:42   #41
electroTrash
Прописка
 
Регистрация: 05.01.2013
Сообщений: 201
Сказал спасибо: 12
Сказали Спасибо 29 раз(а) в 24 сообщении(ях)
electroTrash на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Сообщение от alvadep Посмотреть сообщение
Где примеры доказывающие обратное.
Обратное к чему? Очевидно же, что оно не удовлетворяется из sumADC›~temp16 ---› ~sumADC‹temp16, что приводит к неравенству sumADC+temp16›~sumADC+~temp16, т.е. что для произвольного X›~X???
И почему тогда в книге Генри Уоррена "Алгоритмические трюки для программистов" указано условие для проверки переполнения как:
Код:
if(sumADC|temp16)›(temp16+sumADC) // условие проверки переполнения
,
Реклама:
electroTrash вне форума  
Непрочитано 25.04.2013, 22:06   #42
alvadep
Почётный гражданин KAZUS.RU
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

А что условие проверки переполнения из книги "Алгоритмические трюки для программистов" является единственно правильным решением и другие варианты не имеют право на существование? Почитайте пояснения к другим вариантам тут и тут и попробуйте аргументировано доказать (желательно на пальцах т.е. на числах) не правомерность таких решений.
alvadep вне форума  
Непрочитано 25.04.2013, 22:25   #43
electroTrash
Прописка
 
Регистрация: 05.01.2013
Сообщений: 201
Сказал спасибо: 12
Сказали Спасибо 29 раз(а) в 24 сообщении(ях)
electroTrash на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Сообщение от alvadep Посмотреть сообщение
попробуйте аргументировано доказать
Я уже привел свое доказательство, если не согласны, то попробуйте доказать, где допущена ошибка в моих выкладках и объяснить причину относительно сложного выражения в вышеприведенной книге (кстати, весьма интересной)?
electroTrash вне форума  
Непрочитано 25.04.2013, 22:38   #44
Ara41
Почётный гражданин KAZUS.RU
 
Регистрация: 30.09.2006
Сообщений: 1,560
Сказал спасибо: 158
Сказали Спасибо 661 раз(а) в 431 сообщении(ях)
Ara41 на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Сообщение от electroTrash Посмотреть сообщение
Обратное к чему? Очевидно же, что оно не удовлетворяется из sumADC›~temp16 ---› ~sumADC‹temp16, что приводит к неравенству sumADC+temp16›~sumADC+~temp16, т.е. что для произвольного X›~X???
Просто ~sumADC+~temp16 не равно ~(sumADC+temp16), как Вы утверждаете.
Ara41 вне форума  
Непрочитано 25.04.2013, 23:37   #45
alvadep
Почётный гражданин KAZUS.RU
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Вставлю и я свои 5 копеек.
Из sumADC›~temp16 или ~sumADC‹temp16 совершенно не значит, что sumADC+temp16›~sumADC+~temp16

Пример (для наглядности возьму 1 байт).
sumADC = 00000010
temp16 = 11111110
С этим согласны : 00000010 › ~11111110 или ~00000010 ‹ 11111110
А с этим : 00000010 + 11111110 › 11111101 + 00000001
Вот, что получается после сложения: 00000000 › 11111110
alvadep вне форума  
Непрочитано 26.04.2013, 00:00   #46
electroTrash
Прописка
 
Регистрация: 05.01.2013
Сообщений: 201
Сказал спасибо: 12
Сказали Спасибо 29 раз(а) в 24 сообщении(ях)
electroTrash на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Сообщение от Ara41 Посмотреть сообщение
~sumADC+~temp16 не равно ~(sumADC+temp16)
Да, но только при переполнении! Для остальных случаев все верно.
Это неплохой пример математической софистики!
electroTrash вне форума  
Непрочитано 26.04.2013, 00:09   #47
electroTrash
Прописка
 
Регистрация: 05.01.2013
Сообщений: 201
Сказал спасибо: 12
Сказали Спасибо 29 раз(а) в 24 сообщении(ях)
electroTrash на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Ну а как быть с вторым вопросом:
Сообщение от electroTrash Посмотреть сообщение
объяснить причину относительно сложного выражения в вышеприведенной книге (кстати, весьма интересной)?
PS. Честно говоря, я ответа не знаю, думаю, что должно быть какое то логическое объяснение.
electroTrash вне форума  
Непрочитано 26.04.2013, 00:28   #48
alvadep
Почётный гражданин KAZUS.RU
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Выражение
Цитата:
~sumADC+~temp16 не равно ~(sumADC+temp16)
однозначно в любом случае.

А в книге Уоррена наблюдается некая избыточность, ну кто не без греха.
alvadep вне форума  
Непрочитано 26.04.2013, 00:32   #49
Ara41
Почётный гражданин KAZUS.RU
 
Регистрация: 30.09.2006
Сообщений: 1,560
Сказал спасибо: 158
Сказали Спасибо 661 раз(а) в 431 сообщении(ях)
Ara41 на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Сообщение от electroTrash Посмотреть сообщение
Да, но только при переполнении! Для остальных случаев все верно.
Это неплохой пример математической софистики!
не верно для всех случаев.
Представим инверсию числа Х как (-1-Х)
инверсию Y как (-1-Y)
л.ч. = -1-Х-1-Y=-2-Х-Y
п.ч. = -1-(X+Y) =-1-X-Y
Две части Вашего "равенства" будут отличаться на единицу.
Ara41 вне форума  
Непрочитано 26.04.2013, 00:50   #50
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Тэк-с. Не поленился и скачал упомянутую книгу Уоррена. И что мы видим?!? В разделе 2.12 "Обнаружение переполнения" на странице 42 русского перевода: для обнаружения переполнения при беззнаковом сложении х+у приведены две формулы проверки:
Код:
~x ‹ y
x+y ‹ x
Если выполняется любое из условий, то будет переполнение при сложении.
Налицо полное единодушие с Генри!
Формулу увж. электроТраша найти пока не удалось ...
Yurkin2007 вне форума  
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Измерение времени выполнения куска кода в Протеусе. Как? tems-ya Proteus 4 21.01.2010 21:41
ATmega128 PORTF как инициализировать на выход lzrvt Микроконтроллеры, АЦП, память и т.д 3 07.10.2007 17:07
Как уменьшить прошивку кода написанного на С? graham Микроконтроллеры, АЦП, память и т.д 30 14.01.2006 21:03
[Решено] Порт А неработает как выход LDA Коллекция глюков 2 06.12.2004 21:25
переполнение TMR2 ??? Picallka Микроконтроллеры, АЦП, память и т.д 2 11.02.2004 21:32


Часовой пояс GMT +4, время: 19:44.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot