Теория - помогите сделать блок-схему

Ответить
Аватара пользователя
mrcnn

Re: Теория - помогите сделать блок-схему

Сообщение mrcnn »

А ведь предупреждали: не сравнивайте вещественные числа между собой. Нет же, пока САМ не обожжется - должен попробовать. //
http://forum.pascalnet.ru/lofiversio...hp/t24610.html




ВОТ ПРИМЕР КАК ОБЖИГАЮТСЯ



select * from table_name where val=1.7

Значение 1.5 остается как было, значение 1.7 меняется на 1.70000004768372.
//
http://www.sql.ru/forum/958491/strannyy-kosyak-s-float




ГДЕ ТА БЕСКОНЕЧНОСТЬ, КОТОРУЮ ВЫ ТУТ МНЕ ПЫТАЕТЕСЬ ДОКАЗАТЬ?



А число 1.7 в двоичной системе имеет бесконечный хвост, который сохранить полностью не представляется возможным. //
http://www.sql.ru/forum/958491/strannyy-kosyak-s-float




Это, кстати, касается и случая, когда Вы сравниваете вещественные числа, не учитывая точность представления чисел. Посмотрев в отладчике, что числа, вроде как одинаковые, но сравнение срабатывает так, как будто они разные, Вы не задумались бы, что именно в сравнении содержится ошибка. //
http://popoff.donetsk.ua/text/work/prg/debug.html




У вещественных чисел есть погрешность. Сравнивайте не "равно", а больше/меньше, с учетом этой погрешности. //
http://linuxforum.ru/viewtopic.php?id=4076




Не сравнивайте на равенство вещественные числа. //
http://www.intuit.ru/studies/courses...?page=2‎




Уж сколько раз твердили миру: не сравнивайте вещественные числа на равентство. //
www.forum.mista.ru/topic.php?id=620586




Не сравнивайте вещественные числа оператором = (равно). Это не проблема Delphi, а свойство их представления. //
http://rfpro.ru/?step=search&mode=an...=5&from=110280
Аватара пользователя
Iska

Re: Теория - помогите сделать блок-схему

Сообщение Iska »

Цитата mrcnn:



Это в этой программе может сравнение и работать. Но можно нарваться на ситуацию, когда она не сработает.
Теория - помогите сделать блок-схему




Ага. Есть сдвиги. Уже «работает, но можно нарваться», вместо «никогда». Тогда приведите пример про «нарваться», когда «1/3» не будет равна «1/3».




Цитата mrcnn:



Ваше рассуждение индуктивное. Вы пытаетесь ОДНИМ примером доказать правильность перевода вывода на весь класс предметов, и в данном случае это ошибочно.
Теория - помогите сделать блок-схему




Это утверждение коллеги Tau_0:


Цитата:



ибо никогда в лоб на плавающей точке равенства не будет...



ошибочно, а вслед за ним и Ваше. Я его опровергаю «ОДНИМ» простым незатейливым примером.




Цитата mrcnn:



Проблему неполной индукции еще никто не отменял. Это у вас сейчас работает, но в целом оно неправильно даже несмотря на то, что временно работает или работает в каких отдельных ситуациях. Ваш пример работает, потому что это временное исключение.
Теория - помогите сделать блок-схему




Ну, ну. Повторяю уже в третьем сообщении: приведите исключение, когда «1/3» не будет равна «1/3».




Цитата mrcnn:



Я сталкивался с ситуациями, когда 0 не был равен 0 в простых программах из-за того, что нет бесконечности.
Теория - помогите сделать блок-схему




Эко Вас понесло. Оставим пока в покое два представления машинного нуля и т.п.




Цитата mrcnn:



Компьютер всегда работает с приближением, поэтому разрабатываются численные методы дифференцирования, интегрирования, решения уравнений и т.д.
Теория - помогите сделать блок-схему




Напротив.
читать дальше »


Компьютер всегда работает точно. И потому может терять представление порядка в ту или иную сторону вследствие ограниченности его (порядка) представления. И вот потому-то, что он работает точно, и разрабатываются различные методы округления для компенсации ошибок вычислений при (повторяю в третий раз) переполнении и исчезновении порядка. Но это не имеет ни малейшего отношения к тому, что два числа будут равны или не равны между собой, независимо от того, был ли потерян порядок их представления или нет, ибо порядок будет потерян равнозначно у обоих сравниваемых чисел.






читать дальше »



Цитата mrcnn:



Компьютеры являются дискретными устройствами, поэтому вам даже в информации о процессоре Intel i7 пишут, что видеокадаптер встроенный в процессор является дискретным. В комьютере реализуются дискретные функции, потому что нельзя реализовать непрерывные. Нельзя реальный физический мир повторить в комьютере. Есть специальный курс дискретной математики в профессиональных ВУЗах для программистов и инженеров. Реализуя компьютерный алгоритм в программе, вы всегда переводите с непрерывного класса функций на дискретный.

Бесконечности вещественных чисел в компьютере нет. Поэтому на плавающей точке в лоб равенства может не быть. В электронике на физическом уровне инженерами реализована ТОЧНОСТЬ ДО определенного ЭПСИЛОН, а не бесконечность. Я имею в виду инженеров компаний типа Intel, AMD и т.д., которые занимаются созданием чипов.

1/3 переводится к конечному представлению в компьютерах.
Теория - помогите сделать блок-схему





Цитата mrcnn:



А ведь предупреждали: не сравнивайте вещественные числа между собой. Нет же, пока САМ не обожжется - должен попробовать. //
http://forum.pascalnet.ru/lofiversio...hp/t24610.html


ВОТ ПРИМЕР КАК ОБЖИГАЮТСЯ

select * from table_name where val=1.7

Значение 1.5 остается как было, значение 1.7 меняется на 1.70000004768372. //
http://www.sql.ru/forum/958491/strannyy-kosyak-s-float


ГДЕ ТА БЕСКОНЕЧНОСТЬ, КОТОРУЮ ВЫ ТУТ МНЕ ПЫТАЕТЕСЬ ДОКАЗАТЬ?

А число 1.7 в двоичной системе имеет бесконечный хвост, который сохранить полностью не представляется возможным. //
http://www.sql.ru/forum/958491/strannyy-kosyak-s-float


Это, кстати, касается и случая, когда Вы сравниваете вещественные числа, не учитывая точность представления чисел. Посмотрев в отладчике, что числа, вроде как одинаковые, но сравнение срабатывает так, как будто они разные, Вы не задумались бы, что именно в сравнении содержится ошибка. //
http://popoff.donetsk.ua/text/work/prg/debug.html


У вещественных чисел есть погрешность. Сравнивайте не "равно", а больше/меньше, с учетом этой погрешности. //
http://linuxforum.ru/viewtopic.php?id=4076


Не сравнивайте на равенство вещественные числа. //
http://www.intuit.ru/studies/courses...?page=2‎


Уж сколько раз твердили миру: не сравнивайте вещественные числа на равентство. //
www.forum.mista.ru/topic.php?id=620586


Не сравнивайте вещественные числа оператором = (равно). Это не проблема Delphi, а свойство их представления. //
http://rfpro.ru/?step=search&mode=an...=5&from=110280
Теория - помогите сделать блок-схему








Зачем Вы мне это доказываете? Я об этом давно уже написал в этой теме, поднимите глаза долу на
Теория - помогите сделать блок-схему
. Но всё это никак не отменяет того факта, что утверждение


Цитата:



ибо никогда в лоб на плавающей точке равенства не будет...



ложно. Можно утверждать лишь о том, что «В результате потери или исчезновения порядка при вычислениях результаты сравнения а) могут б) в некоторых случаях оказаться некорректными», а вовсе не тот тезис, из-за которого разгорелся весь сыр-бор. И плавающая точка тут совершенно не при чём. Ровно та же логика будет, к примеру, на целых числах и целочисленных вычислениях.
Аватара пользователя
mrcnn

Re: Теория - помогите сделать блок-схему

Сообщение mrcnn »

]Это в этой программе может сравнение и работать. Но можно нарваться на ситуацию, когда она не сработает. А если оно не сработает, но на вид все будет правильно (и компилятор все съест, и программа будет работать), то в какой-то момент подобная ошибка сравнения может появиться. Ваше рассуждение индуктивное. Вы пытаетесь ОДНИМ примером доказать правильность перевода вывода на весь класс предметов, и в данном случае это ошибочно. Проблему неполной индукции еще никто не отменял. Это у вас сейчас работает, но в целом оно неправильно даже несмотря на то, что временно работает или работает в каких отдельных ситуациях. Ваш пример работает, потому что это временное исключение. Я сталкивался с ситуациями, когда 0 не был равен 0 в простых программах из-за того, что нет бесконечности. Компьютер всегда работает с приближением, поэтому разрабатываются численные методы дифференцирования, интегрирования, решения уравнений и т.д. То есть с непрерывного класса функций, в компьютере все переводится в дискретный класс функции. На теории вероятностей и мат статистике рассматривается и случай непрерывных функций, и случай дискретных функций. Компьютеры являются дискретными устройствами, поэтому вам даже в информации о процессоре Intel i7 пишут, что видеокадаптер встроенный в процессор является дискретным. В комьютере реализуются дискретные функции, потому что нельзя реализовать непрерывные. Нельзя реальный физический мир повторить в комьютере. Есть специальный курс дискретной математики в профессиональных ВУЗах для программистов и инженеров. Реализуя компьютерный алгоритм в программе, вы всегда переводите с непрерывного класса функций на дискретный.

Бесконечности вещественных чисел в компьютере нет. Поэтому на плавающей точке в лоб равенства может не быть. В электронике на физическом уровне инженерами реализована ТОЧНОСТЬ ДО определенного ЭПСИЛОН, а не бесконечность. Я имею в виду инженеров компаний типа Intel, AMD и т.д., которые занимаются созданием чипов.

1/3 переводится к конечному представлению в компьютерах.
Аватара пользователя
Iska

Re: Теория - помогите сделать блок-схему

Сообщение Iska »

mrcnn, обсуждали уже. Я привел шесть разных примеров, где равенство возможно и даже необходимо. Но потом удалил сообщения, чтобы не разводить флейм. Повторю еще раз: полностью согласен с уважаемым Iska. Перестаньте мыслить категориями 20-тилетнй давности. Воспринимайте "a" и "b" из задачи не как числа, а как объекты, между которыми определено отношение эквивалентности.

А уж что именно это за объекты - неважно. Я приводил пример и с вещественными числами для которых оператор == был переопределен и с матрицами и с вещественными для которых требовалось именно побитовое совпадение и даже с виртуальными машиными в которых такие числа как 1/3 или корень из двух представлены без какой-либо потери точности...

Сущность этих объектов не имеет никакого значения для контекста задачи.

Конечно, если Вы хотите сказать, что никакие объекты не могут быть эквивалентными.... Тогда Вам на философский форум.



Я предлагаю оставить вопрос о, якобы, неправильных условиях задачи, поскольку обсуждение его автору не только не поможет, но, напротив, может создать у него ложное впечатление о том, что команды сравнения вещественных чисел на равенство были включены в архитектуру процессоров идиотами.
Аватара пользователя
mrcnn

Re: Теория - помогите сделать блок-схему

Сообщение mrcnn »

ЭВМ оперирует структурами конечного типа. 1/3 не является в компьютере бесконечным. Выше приведен пример с числом 1.7, которое было преобразовано в 1.70000004768372 В 1/3 тоже добавляется в конец "мусор".. Вы проверяете на платформе i386 а на других платформах, например встроенных систем, мобильных устройств и т.п. ваш пример может не сработать. ВАША ПРОГРАММА БЫЛА ПРОВЕРЕНА ЛИШЬ НА ВАШЕМ КОМПЬЮТЕРЕ, но не проверялась на других платформах. Докажите сперва, что ваша программа работает вообще ? Если она на вашем компьютере работает, это не значит, что она правильная. С чего вы решили, что у вас правильный код? Может быть, его и не всякий компилятор скомпилирует? 1/3 вообще в языке C нет, и об этом написано у K&R, что нельзя в программе на языке С писать 1/3, это ошибка. Вы впариваете тут бред и чушь, и еще и спорите, понимая, что не правы.. Ваша программа на языке С ошибочная вообще. Помимо i386 есть еще и платформы ARM, Itanium, а помимо процессоров Intel и AMD есть еще много разных процессоров. Докажите сперва, что ваша программа, которая является как пример, является верной. где ваша выборка и результаты тестирования программы на парке, скажем из тысячи машине? и вообще вы кто такой по жизни, если спорите о простых вещах? Вы не программист вообще, а хз кто.



страница 184 Математический энциклопедический словарь

ДИСКРЕТНАЯ МАТЕМАТИКА - область математики, занимающаяся изучением свойств дискретных структур, к-рые возникают как внутри математики, так и в ее приложениях. К числу таких структур могут быть отнесены, напр. конечные группы, конечные графы, а также не-рые математич. модели преобразователей информации, конечные автоматы, машины Тьюринга и т.п. Это примеры структур финитного (конечного) характера.



страница 281 Математический энциклопедический словарь

КОНЕЧНЫЙ АВТОМАТ - матемтическая модель устройства с конечной памятью, преобразующего дискретную информацию.



страница 360

МАШИНА - абстрактное устройство, осуществляющее переработку информации. Возникновение их связано с анализом понятия алгоритма, начавшегося в сер. 30-ч гг. 20 в., с развитием ЭВМ Наибольшее распространение получили М., перерабатывающие дискретную информацию, типичными представителями к-рых являются конечный автомат и Тьюринга машина.



страница 597

ТЬЮРИНГА МАШИНА - название, закрепившееся за абстрактными вычислительными машинами некоторого точно охарактеризованного типа.
Аватара пользователя
AMDBulldozer

Re: Теория - помогите сделать блок-схему

Сообщение AMDBulldozer »

mrcnn, обсуждали уже. Я привел шесть разных примеров, где равенство возможно и даже необходимо. Но потом удалил сообщения, чтобы не разводить флейм. Повторю еще раз: полностью согласен с уважаемым Iska. Перестаньте мыслить категориями 20-тилетнй давности. Воспринимайте "a" и "b" из задачи не как числа, а как объекты, между которыми определено отношение эквивалентности.

А уж что именно это за объекты - неважно. Я приводил пример и с вещественными числами для которых оператор == был переопределен и с матрицами и с вещественными для которых требовалось именно побитовое совпадение и даже с виртуальными машиными в которых такие числа как 1/3 или корень из двух представлены без какой-либо потери точности...

Сущность этих объектов не имеет никакого значения для контекста задачи.

Конечно, если Вы хотите сказать, что никакие объекты не могут быть эквивалентными.... Тогда Вам на философский форум.



Я предлагаю оставить вопрос о, якобы, неправильных условиях задачи, поскольку обсуждение его автору не только не поможет, но, напротив, может создать у него ложное впечатление о том, что команды сравнения вещественных чисел на равенство были включены в архитектуру процессоров идиотами.
Аватара пользователя
pva

Re: Теория - помогите сделать блок-схему

Сообщение pva »

Цитата mrcnn:



ЭВМ оперирует структурами конечного типа.
Теория - помогите сделать блок-схему




Подтверждаю.




Цитата mrcnn:



1/3 не является в компьютере бесконечным.
Теория - помогите сделать блок-схему




Согласен.




Цитата mrcnn:



Выше приведен пример с числом 1.7, которое было преобразовано в 1.70000004768372 В 1/3 тоже добавляется в конец "мусор"..
Теория - помогите сделать блок-схему




Не добавляется. Говоря Вашими словами, происходит отсечение «невмещающихся» цифр мантиссы.




Цитата mrcnn:



Вы проверяете на платформе i386 а на других платформах, например встроенных систем, мобильных устройств и т.п. ваш пример может не сработать. ВАША ПРОГРАММА БЫЛА ПРОВЕРЕНА ЛИШЬ НА ВАШЕМ КОМПЬЮТЕРЕ, но не проверялась на других платформах. Докажите сперва, что ваша программа работает вообще ? Если она на вашем компьютере работает, это не значит, что она правильная. С чего вы решили, что у вас правильный код? Может быть, его и не всякий компилятор скомпилирует?
Теория - помогите сделать блок-схему




1. Видите ли, язык C, коль уж о нём заговорили, создавался именно как переносимый язык, зависящий от платформы только библиотеками (другое дело, что на практике предпочли принести переносимость в жертву производительности).

2. «Докажите сперва, что ваша программа работает вообще ?» — если Вам недостаточно исходного кода, могу выложить бинарный файл, но, боюсь, Вас и это не убедит, что «программа работает».

3. Поищите у «не всякого компилятора» параметр, включающий поддержку стандарта ANSI.




Цитата mrcnn:



Ваша программа на языке С ошибочная вообще.
Теория - помогите сделать блок-схему




Чем именно «ошибочная вообще»?




Цитата mrcnn:



1/3 вообще в языке C нет, и об этом написано у K&R, что нельзя в программе на языке С писать 1/3, это ошибка.
Теория - помогите сделать блок-схему




На какой странице [Iska задумчиво мусолит второе издание K&R]?




Цитата mrcnn:



Помимо i386 есть еще и платформы ARM, Itanium, а помимо процессоров Intel и AMD есть еще много разных процессоров. Докажите сперва, что ваша программа, которая является как пример, является верной. где ваша выборка и результаты тестирования программы на парке, скажем из тысячи машине?
Теория - помогите сделать блок-схему




У Вас хромает логика: не требуется доказывать корректность работы приведённого приложения для всех мыслимых платформ. Для подтверждения факта ложности категоричного императива:


Цитата:



ибо никогда в лоб на плавающей точке равенства не будет...



достаточно найти одно опровержение. Я этот факт продемонстрировал.




Цитата mrcnn:



Вы впариваете тут бред и чушь, и еще и спорите, понимая, что не правы..
Теория - помогите сделать блок-схему




Я знаю, что я прав. А Вам не хватает корректных аргументов, посему Вы судорожно хватаетесь то за одно, то за другое, то вовсе:


читать дальше »



Цитата mrcnn:



и вообще вы кто такой по жизни, если спорите о простых вещах?
Теория - помогите сделать блок-схему




Зовут меня У, сам я вроде как отшельник… Человек я. Обычный человек.




Цитата mrcnn:



Вы не программист вообще, а хз кто.
Теория - помогите сделать блок-схему




Я и не утверждал нигде здесь, что я программист. Я уже лет двадцать как не программист.






Цитата mrcnn:



Машинный нуль …



Константы определены в заголовочном файле float.h
Теория - помогите сделать блок-схему




Говорю Вам в четвёртый раз: не надо убеждать меня в том, что я и сам хорошо знаю. Вы пытаетесь притянуть за уши определение, которое никак ни подтверждает, ни опровергает утверждения:


Цитата:



ибо никогда в лоб на плавающей точке равенства не будет...
Аватара пользователя
mrcnn

Re: Теория - помогите сделать блок-схему

Сообщение mrcnn »

Цитата:



У Вас хромает логика: не требуется доказывать корректность работы приведённого приложения для всех мыслимых платформ.



Хромает логика у вас, так как при полной индукции доказывается корректность для любого возможного случая. Но так как это является невозможным (нельзя физически проверить), для упрощения считают верным, если оно является корректным до некоторого заданного n. Но на самом деле оно является неверным. Нельзя считать что-то верным пока не произведена полная индукция.

В итоге пользователи начинают обращаться в тех поддержку из-за того, что у них программа не работает. Потому что программист не предусмотрел некоторые ситуации. Поэтому, для ПО постоянно выпускают обновления, заделывающие ошибки программистов.




Цитата:



Не добавляется. Говоря Вашими словами, происходит отсечение «невмещающихся» цифр мантиссы.



Иногда на калькуляторе (Citizen) при вычислениях 1.0 превращается в 0.99999(9), что является ошибочным, так как равенство на 1.0 точное, а не приближенное. У компьютера та же самая проблема. При точном равенстве компьютер оперирует приближенным представлениям в рамках эпсилон. В той теме на которую была дана ссылка задано точное равенство, а компьютер потерял точность, в итоге возникла ошибка, так как потерялся результат выборки из базы данных. Запрос на языке SQL был задан в следующем виде select * from table_name where val=1.7 а компьютер к точном 1.7. добавил "мусор" и начал оперировать не точным 1.7 а 1.70000004768372. Никакой мантиссы не было. Причем это все эмпирически, а не на словах. Возникла ошибка.




Цитата Iska:



достаточно найти одно опровержение. Я этот факт продемонстрировал.
Теория - помогите сделать блок-схему




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

В лоб числа с плавающей точкой не сравнивают из-за погрешности. И в архитектуре процессоров заложена определенная погрешность и точность. И инженеры, проектирующие процессоры, могут ошибаться.
Аватара пользователя
Iska

Re: Теория - помогите сделать блок-схему

Сообщение Iska »

Iska

В начале речь шла не о равенстве 1/3 и 1/3 а о сравнении a и b, а вы начали исходить из сравнения a и b при их равенстве сведя в итоге и a и b к 1/3. Конкретно, смотрите изображение IMG_20131130_121057.jpg топик стартера о блок схеме. Вы перевели рассуждение к ситуации, когда a и b аксиоматически являются одинаковы (и равными 1/3), что является неверным для IMG_20131130_121057.jpg Таким образом, вы подменили начальный тезис, сузив его. Причем Tau_0 прокомментировал изображение IMG_20131130_121057.jpg , а не вашу программу.



Последовательность событий:

1. 02:10, Вчера IMG_20131130_121057.jpg топик стартера о блок схеме к программе.

X = {

a / b + 1, если a > b,

a + 25, если a = b,

(a*b - 2) / a, если a < b;

}

2. 05:02, Вчера Tau_0 написал в "См. второй пример на ветвление, если a = b Он совсем не так прост..., ибо никогда в лоб на плавающей точке равенства не будет..."



Это замечание является корректным, так как сравнение вещественных чисел будет отличаться от сравнения целочисленных. В лоб сравнивать нельзя, так как в машинном представлении чисел с плавающей точкой есть погрешность.



В этой теме:
http://www.rsdn.ru/forum/cpp.applied/1187492.flat
в сообщении от 24.05.05 14:53 написано, что сравнивать вещественные числа нужно в некой окрестности и приведен код



Код:

Код: Выделить всё

bool isEq(double a, double b)
{
   return abs(a-b)
Аватара пользователя
mrcnn

Re: Теория - помогите сделать блок-схему

Сообщение mrcnn »

Цитата mrcnn:



Хромает логика у вас, так как при полной индукции доказывается корректность для любого возможного случая.
Теория - помогите сделать блок-схему




Я опроверг конкретное утверждение. И попытки приплести сюда индуктивный вывод для его подтверждения уже ни к чему. Вы придумали себе нечто, и теперь с этим, Вами же придуманным, спорите.



Было сказано: «Для любых X верно Y». Я привёл опровержение, что Y верно отнюдь не для любых X. Но Вы с какого-то перепугу придумали себе и упорно требуете от меня доказательства «Для каждого X не верно Y».




Цитата mrcnn:



Иногда на калькуляторе (Citizen) при вычислениях 1.0 превращается в 0.99999(9), что является ошибочным,
Теория - помогите сделать блок-схему





читать дальше »


О! Давайте ещё на счётах проверим, там уж точно приложение на C откажется работать. Вот будет доказательство так доказательство!



Первое ключевое слово — «при вычислениях». Второе — «при различных». Но, повторяю вновь: это никак не подтверждает, либо опровергает сделанного утверждения:


Цитата:



ибо никогда в лоб на плавающей точке равенства не будет...




Цитата mrcnn:



Ваша программа, которую вы привели в качестве опровержения, является неправильной, ошибочной. Сомнительно, что она будет скомпилирована gcc компилятором.
Теория - помогите сделать блок-схему




Вы опять забыли сказать чем именно она «является неправильной, ошибочной».


читать дальше »




Изображение

Изображение






Цитата mrcnn:



В лоб числа с плавающей точкой не сравнивают из-за погрешности. И в архитектуре процессоров заложена определенная погрешность и точность. И инженеры, проектирующие процессоры, могут ошибаться.
Теория - помогите сделать блок-схему




Вы мне выше рекомендовали кое-что почитать. Я Вам тоже порекомендую.
читать дальше »


Есть такая книга:
Программирование арифметических операций в микропроцессорах. Злобин В.К., Григорьев В.Л.
Ещё советского издания. И вот там на трёхстах страницах подробным образом изложены теория и, главное, практика программирования арифметических операций в двух наиболее известных микропроцессорах. С картинками, с блок-схемами
. И рабочими листингами на ассемблере.



Сколько раз мне Вам повторять две вещи:

1. Я это знаю.

2. Это никак не доказывает истинности или ложности утверждения.
Ответить

Вернуться в «Программирование и базы данных»