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

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

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

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

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

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


 
Опции темы

Как в Си определить выход за приделы кода (переполнение) результата операции ?

Непрочитано 26.04.2013, 01:59  
electroTrash
Прописка
 
Регистрация: 05.01.2013
Сообщений: 195
Сказал спасибо: 11
Сказали Спасибо 24 раз(а) в 21 сообщении(ях)
electroTrash на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Сообщение от alvadep Посмотреть сообщение
А в книге Уоррена наблюдается некая избыточность
Думаю, можно доказать эквивалентность этих неравенств:
Цитата:
"умножим" неравенство x›~y с обеих сторон на x&, так оно только усилиться, так как x&x=x, а x&~y‹=~y, получим
x›(x&~y)=x|y-y ---› x+y›x|y
"Почти" эквивалентно!
Смущает только то, что была операция с усилением неравенства, что не есть хорошо.
Сообщение от Yurkin2007 Посмотреть сообщение
Формулу увж. электроТраша найти пока не удалось .
она на ст. 31, сверху.
Реклама:

Последний раз редактировалось electroTrash; 26.04.2013 в 02:05.
electroTrash вне форума  
Непрочитано 26.04.2013, 02:58  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Сообщение от electroTrash Посмотреть сообщение
она на ст. 31, сверху.
Ну, все понятно. В том разделе автор обсуждает арифметические и логические операции, играется с заменой арифметического сложения "+" на логическое сложение ИЛИ. В частности утверждает, что логическое сложение дает равный или меньший результат, чем арифметическое сложение. За исключением случаев переполнения: тогда логическая операция дает больший результат. Только и всего. И Ваша формула как раз об этом.
А для проверки на переполнение, действительно, в ней избыточное усиление неравенства: можно запросто выкинуть логическое сложение, оставить только один операнд для сравнения с арифметической суммой.

Последний раз редактировалось Yurkin2007; 26.04.2013 в 03:04.
Yurkin2007 вне форума  
Непрочитано 26.04.2013, 06:52  
electroTrash
Прописка
 
Регистрация: 05.01.2013
Сообщений: 195
Сказал спасибо: 11
Сказали Спасибо 24 раз(а) в 21 сообщении(ях)
electroTrash на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Сообщение от Yurkin2007 Посмотреть сообщение
Только и всего. И Ваша формула как раз об этом.
А что этого не достаточно?! Но, чтобы внести ясность, я выведу то, на что Вы указали только намеком и весьма туманно.
Цитата:
так, выделим из суммы сумму переполнения: x+y=x+~x+y-~x=1+y-~x, а если суммировать по модулю числа соответствующему наибольшему возможному числу(обозначаем как 1 ), то условие наличие переноса будет таким y-~x›0 или x-~y›0, т.е. достаточно чтобы удовлетворялось условие y›~x (x›~y), а если учесть, что для сумма при отсутствии переполнения справедливо неравенство x+y›=x|y, получим, что при переполнении для суммы с потерей переноса 0‹((x+y)=(y-~x))‹(x|y), из которого понятно, что условие наличия переноса можно написать и так z›x+y, где z любое число в пределах 0‹z‹=(x|y),, в частном случае можно выбрать z равным x; y; (x|y), что автоматически позволяет удовлетворить условиям выбора для z.
Как видно из вышеприведенных выкладок, неравенство (x|y)›x+y дает возможность оценить верхнюю границу суммы при переполнении, т.е. оно дополняет основное условие x(y)›~y(~x), но не подменяет.

Последний раз редактировалось electroTrash; 26.04.2013 в 06:55.
electroTrash вне форума  
Непрочитано 26.04.2013, 11:29  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Если вы обсуждаете как исключить из выборки случайные результаты (помеху), то на это есть достаточно чёткая методика.
1. Определяете закон распределения ваших измерений (или выбираете).
2. На ходу считаете мат ожидание (ваше среднее)
3. На ходу определяете дисперсию, согласно выбранного закона распределения и выбранного уровня доверительного интервала.
4. Выбрасываете значения превышающие данный уровень из выборки.
===
На практике выглядит так. Если закон распределения нормальный, то считается скользящее среднее, и значения превышающие 1.4 от этого среднего отбрасываются.
Понятно, что частота выборки должна быть значительно выше чем скорость изменения входного сигнала. Она должна быть сопоставима с объёмом выборки. То есть если частота 8кГц, и вы считаете среднее по 16 выборкам, то частота входного сигнала не должна превышать 8/16/2 = 250 Гц.
По-моему так...
SasaVitebsk вне форума  
Непрочитано 26.04.2013, 11:33  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Сообщение от electroTrash Посмотреть сообщение
А чего тут понимать то, эти коэффициенты определяют вероятность того или иного значения, а их сумма всегда должна P1+P2+... +Pn=1, тогда X=X1*P1+...XnPn, непонятно другое, почему надо брать разные коэффициенты вне зависимости от величины измерения X1, а от порядкового номера, который определяется абсолютно произвольно?
Не произвольно. У вас равноотстоящие результаты. То есть результаты с частотой семплирования. Соответственно коэффициенты определяют частоту фильтрации сигнала.
SasaVitebsk вне форума  
Непрочитано 26.04.2013, 11:52  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Неужели на Си так сложно проверять флаг переноса?

if (SREG.0 == 1) {
обработка переполнения
}
niXto вне форума  
Непрочитано 26.04.2013, 11:59  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Сообщение от niXto Посмотреть сообщение
Неужели на Си так сложно проверять флаг переноса
Таким образом - не сложно, конечно.
Только страдает переносимость. Для каждого типа процессоров придётся переписывать программу, потому что у разных МК бит переноса сидит в разных местах.
Поэтому тут и изобретаются универсальные чисто сишные способы.
Yurkin2007 вне форума  
Непрочитано 26.04.2013, 12:02  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Сообщение от niXto Посмотреть сообщение
Неужели на Си так сложно проверять флаг переноса?

if (SREG.0 == 1) {
обработка переполнения
}
От сложения до проверки флага может быть и далеко...
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 26.04.2013, 12:14  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Сообщение от electroTrash Посмотреть сообщение
попробуйте ... объяснить причину относительно сложного выражения в вышеприведенной книге ...
Честно говоря, я ответа не знаю, думаю, что должно быть какое то логическое объяснение.
Причина Вы объяснена, я думаю, достаточно понятно.

Сообщение от electroTrash Посмотреть сообщение
Все эти условия проверки имеют ошибки, так сказать "слабые точки" ...
абсурдность этого условия очевидна ...
По-моему, сейчас самое время взять свои слова обратно, не так ли, увж. electroTrash ?
Yurkin2007 вне форума  
Непрочитано 26.04.2013, 13:29  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Как в Си определить выход за приделы кода (переполнение) результата операции ?

Сообщение от Yurkin2007 Посмотреть сообщение
Таким образом - не сложно, конечно.
Только страдает переносимость. Для каждого типа процессоров придётся переписывать программу, потому что у разных МК бит переноса сидит в разных местах.
Поэтому тут и изобретаются универсальные чисто сишные способы.
Тогда нужно писать код так, чтобы переполнение вообще никогда не возникало... Добавить третий регистр. А не вначале создать проблему, а потом мужественно с ней бороться
niXto вне форума  
 
Опции темы

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

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 20:25
переполнение TMR2 ??? Picallka Микроконтроллеры, АЦП, память и т.д 2 11.02.2004 21:32


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.