Pull to refresh

Comments 81

PinnedPinned comments

Конкурс. Практика критерий истинности

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

Итак чтобы это статья была признана чушью, а я лично принёс извенения нужно сделать очень лёгкую вещь: Приведите пример любого иррационального числа, принимаются любые из списка в википедии, которое полностью можно записать в double или float. Так чтобы это не было в конечном итоге рациональным числом.
Принимаются языки: C++/C#/Java. Почему они? В них есть типизация, в частности примитивные типы double и float и они (ЯП) всем знакомы, чтобы не было волшебных языков Упалумпа которые работают при определённых погодных условиях и т.д.
Использовать стандартные примитивные типы double и float, опять же во избежания секретных оккультных ритуалов с магическими кастомными типами и лишней путаницы.
И всё!

Напоминаю позицию: "Double и Float не вещественные числа т.к. ни одно иррациональное число не входит в область покрываемых значений".

Сразу отвечу здесь на пару якобых контраргументов:
1.> А как же числа NaN и бесконечности?
- Отвечаю, чтобы этот контраргумент был засчитан нужно доказать что NaN и бесконечности являются во первых числом, а во вторых иррациональными, а не например мнимыми, тогда это имеет смысл. Если это не иррациональные числа то, в чём тогда контраргумент заключается? Я же не утверждаю, что double или float принадлежит к какому-то классу чисел, я лишь говорю, что он точно не вещественный по причине неимения ни одного иррационального числа в своей области значений. А если вы согласны с тем, что можно называть любой тип любым классом чисел, если он покрывает хотябы один подкласс класса, то почему бы не называть по такой логике long и int комплексными?

2.> Иррациональные числа бесконечны только в позиционной системе счисления.
- А в какой системе счисления работает компьютер? В логарифмической? То, что в какой-то системе оно будет конечно я понимаю, на бумажке можно написать и представить, что это так додумывая, но компьютер работает в позиционной системе счисления и пользуется правилами позиционной системы счисления, следовательно и классификация чисел будет осуществляться по признакам позиционной системы счисления. В таком случае иррациональное число нельзя записать в виде обыкновенной дроби, но можно записать в виде бесконечной не переодической дроби. И возвращаясь к нашему конкурсу, приведите мне пример иррационального числа, которое полностью можно записать в double или float и его нельзя будет записать в виде обыкновенной дроби, достаточно любого из списка википедии.

Они не просто рациональные. Они еще и маленькое подмножество рациональных, где в знаменателе стоит степень двойки. Многие рациональные числа тоже нельзя записать как float или double.

представляю себя преподавателем начальных курсов технических вузов

и меееедленно начинаю ... объяснять. :)

Меееедленно и надмееееннно.

Если уж на то пошло, то и рациональными они тоже не являются, так как включают такие прекрасные значения как:

  • Положительная бесконечность

  • Отрицательная бесконечность

  • Вообще не число

Правильно будет сказать, что типы Double и Float используются для представления вещественных чисел в памяти компьютера. Не все вещественные числа могут быть представлены абсолютно точно, некоторые только приближенно. Это относится как к рациональным, так и к иррациональным числам.

Точно также типы int, long и т.п. могут представить только некоторое подмножество целых чисел. Тем не менее их называют целыми типами и никто не возражает.

Проблема имхо преувеличена.

Автору на первом курсе не рассказали, что непрерывный физический мир моделируется на дискретном вычислительном устройстве, не рассказали о численных и аналитических решениях задач, и, кажется, ещё много о чём не рассказали.

Мир местами непрерывный, местами квантовый, всё сложно.

Квантовый мир — он еще более непрерывный. В классике реализуется один вариант эволюции на экстремуме функционала действия S, в квантовом мире же реализуются все варианты эволюции с весом eiS одновременно. Это такая насмешка природы, что при добавлении непрерывности мир начинает проявлять дискретные свойства.

В классике реализуется один вариант эволюции на экстремуме функционала действия S

Причем, как нам сказал препод теормеха: "Природа ленива, поэтому идет кратчайшим путем". И развернули мы минимум этого функционала.

Первое применение слова ДИСКРЕТНЫЙ от начала статьи. Но от автора статьи это слово, видимо, утаили.

Правильно будет сказать, что типы Double и Float используются для представления вещественных чисел

Так это прямо в первом предложении из FP formats overview, из 754-2008: “This clause defines floating-point formats, which are used to represent a finite subset of real numbers”.

Представление конечного подмножества вещественных чисел.

Так что проблема не просто преувеличена, её нет вообще. Числа – вещественные, но просто не все, стандарт об этом прямо говорит.

Чем это определение решает проблему? Определение говорит о том, что мощность множества конечное и не о чём другом.

Напомните, в чём проблема? Если та, что в заголовке – то нет такой проблемы. Double и float конечные множества, состоящие из конкретных вещественных чисел (некоторые – не по одному разу денормализованными представлениями), а также бесконечностей, особых нулей и NaN-ов.

"Вещественные числа dooble float" - это взгляд математика на программирование. Возникает такая же проблема когда теоретики С++ (или другого высокоуровневого языка или теории) начинают рассуждать о работе процессора (или чем-то вещественном и реальном).

И все таки числа с плавающей точкой - это один из вариантов представления вещественного числа для вычислительной машины. А то что можно записать только часть рациональных, ну так получилось. Даже не все рациональные здесь имеются, то есть dooble рациональным тоже назвать нельзя. С точки зрения расчетов до нескольких знаков после запятой, число 1/3 0.3333333432674407958984375 можно считать как бесконечную дробь, в том числе и урезанную ПИ как полную запись.

Кроме того и про int можно сказать что это не целые числа, потому что все возможные варианты туда не помещаются.

(пака писал уже подобные мысли выше появились)

Помню, в свое время, спорил в школе с биологичкой. Она на пену исходила, что человек - не животное... Млекопитающее, теплокровное, хордовое, но не животное.

Как это человек не животное? Он более того примат, как например бабуин или макак.

Не могу понять, где я писал, что double и float это не рациональные числа, потому что они не включают в себя всё множество рациональных чисел. Откуда это соломенное чучело, с которым вы спорите?

Так вывод, что double и float – не рациональные, сделан по индукции из вашей статьи.

Если я правильно понял, то вы утверждаете, что поскольку посредством float из IEEE 754 нельзя представить числа из множества R, их некорректно называть вещественными.

Люди вокруг утверждают, что их тогда и рациональными называть некорректно, поскольку не все числа из Q возможно представить без пгорешности в числовой сетке. И ещё @nin-jin заметил, что наличие двух нулей, NaN и двух бесконечностей тоже не очень сильно похоже на множество рациональных чисел.

Так вывод, что double и float – не рациональные, сделан по индукции из вашей статьи.

Видимо те кто делают такой вывод не знают как работает индукция.

Если я правильно понял, то вы утверждаете, что поскольку посредством float из IEEE 754 нельзя представить числа из множества R, их некорректно называть вещественными.

Нет не правильно, число 2.53 можно представить типом float и это число будет принадлежать множеству R.

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

Это выдуманый критерий из их головы, я такого не говорил.

Это выдуманый критерий из их головы, я такого не говорил.

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

По крайней мере вы утверждаете что их нельзя назвать вещественными, поскольку часть из них (как иррациональные) в них не входят.

Нет, я такого не говорил, это не моя позиция

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

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

R = Q ∪ I, если мы исключаем I из-за невозможности работы с ними в прямом смысле без представлений получается R' = R\I, R' = Q, а Q у нас рациональные числа.

Это тогда что?

А 1/5=0.2 нельзя точно представить типом флоат, хотя она и принадлежит множеству рациональных.

число 2.53 можно представить типом float

Это как? Ближайшее приближение для 2.53, которое можно представить во float — 1.2649999856948853 * 2 == 2.5299999713897706

Нет не правильно, число 2.53 можно представить типом float и это число будет принадлежать множеству R.

А можете показать, как будет выглядеть 2.53 во float? Есть веские основания полагать, что невозможно 2.53 представить во float.

Ради интереса посмотрел в онлайн конвекторе double:2.529999999999999804600747665972448885440826416015625; single: 2.5299999713897705078125

Ps не заметил что уже написали

Это что это автор удумал? Какие такие числа не вещественные. Это теперь, что все книги по программированию переписывать?:) Проще вас отменить, согласно повесточке, как токсичного и подрывающего основы:):):)

Пожалуйста, не нужно говорить про "отменить", это плохая шутка.

Тем более, что такое уже было, и именно по этому поводу - вспомните Пифагора и Гиппаса.

Все черные кошки — являются кошками. Но не всякая кошка — черна. Ergo, черные кошки — не кошки.

* Согласно стандарту IEEE 754-CAT существуют так же три специальных черных кошки: ваще-не-кошка, супер-кошка и недо-кошка.

Эй, полегче. Котиков не обижать!

Если уж вы так ударились в строгую терминологию, то числа  π и e - не иррациональные, а трансцендентные (поскольку иррациональность вытекает из трансцендентности, но не наоборот). Так что ваш пример не совсем корректен.

Что? Зачем вы мне цитируете то, что я выше как раз и сформулировал? Пи и е - и трансцендентные, и иррациональные числа. Но трансцендентность тут первична - как подмножество иррациональных чисел. Вот цитата по первой же вашей ссылке:

Каждое трансцендентное вещественное число является иррациональным, но обратное неверно.

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

Вещественные числа можно представлять в виде функций, принимающих требуемую точность и возвращающих приближение в виде рационального числа (пары длинно-арифметических (т.е. произвольно больших) целых). Рациональные числа (3, 0.1, ...) в таком функциональном представлении независимо от требуемой точности возвращают самих себя в виде пары. Иррациональные числа (число пи, число Эйлера, ...) описываются вычисляющей их с заданной точностью функцией. Операции и функции (+, корень, ...) принимают и возвращают вещественные числа -- то есть функции (в соответствии с представлением). Возвращаемая функция (результат) должна запомнить аргументы операции -- при передаче ей точности она вычисляет требуемую точность подвыражений, запрашивает их приближения и вычисляет своё приближение. Если надо посчитать сумму с абсолютной погрешностью не более d, можно запросить подвыражения с абсолютной погрешностью не более d/2 и сложить полученные рациональные приближения (пример на Python):

def add(a, b):
    return (lambda d: a(d/2) + b(d/2))

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

Но самое важное здесь это второе предложение "Иррациональное число может быть представлено в виде бесконечной непериодической десятичной дроби.".

Что это значит? Заметили, что в примерах я дал вам буквенное обозначение? Это не просто так, это представление иррационального числа, ВАЖНО - сама запись π это не само иррациональное число, это всего лишь его представление, и оно является чем угодно, но не иррациональным числом. Само Иррациональное число оно бесконечно. Понимаете?

То есть его невозможно записать по определению. Никакой памяти в компьютере не хватит чтобы его записать. Это невозможно!

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

На этом конструктив и критику заканчиваю -- спасибо автору за внимание к такому тонкому вопросу как представление чисел в компьютерах и языках программирования!

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

Согласен, спасибо за замечание, неаккуратно написал.

но очень сомневаюсь, что хотя бы в одном языке в которых используется термин Вещественный тип нельзя чисто синтаксически сделать запись по типу: "double a = π", попросту будет ошибка компиляции

Ну формально в "Матлабе" можно. Есть константа pi. Это раз.

Запись вида sqrt(7) - это тоже, извините меня, запись. И корень из семи не очень рационален. Это два.

Возможно тут уже про это написали, но если вдруг нет -

"Само Иррациональное число оно бесконечно. Понимаете?"

В данном случае число конечно, а бесконечен лишь один из вариантов его записи десятичными цифрами, и не более. Понимаете?

Во-первых, "да ну, а я не знаааал!". Некая банальщина, рассчитанная на самых-самых зелёных, не очень понимаю что она делает на таком сайте как Хабр. Во-вторых, их тогда нельзя считать числами в привычном понимании математиков в принципе. Вы знаете, чем 0 и 0 + 0/10 отличаются? Вот и я не знаю. А 0.0 в большинстве языков программирования – отдельное от число. Да и большинство дробных значений, которые возможно представить в виде дроби х/10^у невозможно представить в виде float, т к переменная тупо ограничена по памяти. И в -третьих, "иррациональное число оно бесконечно. Понимаете?" Это не иррациональное число, лмао. 15/7 можно спокойно записать в 7меричной системе счисления, или используя скобки (2,00(6))

"Скобки" принято называть "периодом", если правильно помню

Не понимаю переживания автора. Числа типа double и float – это не полное множество вещественных чисел, а всего лишь счетное подмножество (это знают не только студенты, но и многие школьники), но разве от этого они перестают быть вещественными? Автор может назвать хоть одно число типа double (оставим пока NaN и inf), которое не являлось бы вещественным? По логике автора дети – не люди, поскольку множество детей является только подмножеством множества людей. Так ведь, автор?

Автор решил поумничать, но сам же допустил эту "ошибку" (в кавычках), т.к. стандарт дает вполне корректное определение, что double представляет только конечное подмножетсво вещественных чисел, В ТОМ ЧИСЛЕ и рациональных. И в это заявление " Всё с чем мы можем работать это ТОЛЬКО РАЦИОНАЛЬНЫЕ ЧИСЛА " в смысле противопоставления их иррациалнальным, ошибочно.

Но самое важное здесь это второе предложение "Иррациональное число может быть представлено в виде бесконечной непериодической десятичной дроби.".

а какая связь между float и double и десятичными дробями?

Подсказка: никакой. Во float и double используется двоичная дробь.

Само Иррациональное число оно бесконечно. Понимаете?

Нет, это вы не понимаете. Я за основание системы исчисления могу взять Пи, и у меня сразу пачка иррациональных чисел станет конечными. Например, почти вся школьная тригонометрия идёт в системе исчисления по основанию Пи.

а какая связь между float и double и десятичными дробями?

Подсказка: никакой. Во float и double используется двоичная дробь.

любая конечная двоичная дробь может быть представлена в виде конечной же десятичной

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

Более того, вы можете взять за основание ф – (1 + √5)/2 – и в такой системе счисления не только пачка иррациональных чисел будет с конечной записью, но и как ни странно все целые )

Вспомнилось почти по теме как правильно называть

Одесса, "Привоз", рыбный ряд. Тётка:
- Бички́!!! Бички́!!!
Приезжий:
- Правильно - "бычки".
- Правильно - "Neogobius fluviatilis", малохольный, а бычки докуривал ваш папа в детдоме, когда я уже тут бички торговала.

Конкурс. Практика критерий истинности

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

Итак чтобы это статья была признана чушью, а я лично принёс извенения нужно сделать очень лёгкую вещь: Приведите пример любого иррационального числа, принимаются любые из списка в википедии, которое полностью можно записать в double или float. Так чтобы это не было в конечном итоге рациональным числом.
Принимаются языки: C++/C#/Java. Почему они? В них есть типизация, в частности примитивные типы double и float и они (ЯП) всем знакомы, чтобы не было волшебных языков Упалумпа которые работают при определённых погодных условиях и т.д.
Использовать стандартные примитивные типы double и float, опять же во избежания секретных оккультных ритуалов с магическими кастомными типами и лишней путаницы.
И всё!

Напоминаю позицию: "Double и Float не вещественные числа т.к. ни одно иррациональное число не входит в область покрываемых значений".

Сразу отвечу здесь на пару якобых контраргументов:
1.> А как же числа NaN и бесконечности?
- Отвечаю, чтобы этот контраргумент был засчитан нужно доказать что NaN и бесконечности являются во первых числом, а во вторых иррациональными, а не например мнимыми, тогда это имеет смысл. Если это не иррациональные числа то, в чём тогда контраргумент заключается? Я же не утверждаю, что double или float принадлежит к какому-то классу чисел, я лишь говорю, что он точно не вещественный по причине неимения ни одного иррационального числа в своей области значений. А если вы согласны с тем, что можно называть любой тип любым классом чисел, если он покрывает хотябы один подкласс класса, то почему бы не называть по такой логике long и int комплексными?

2.> Иррациональные числа бесконечны только в позиционной системе счисления.
- А в какой системе счисления работает компьютер? В логарифмической? То, что в какой-то системе оно будет конечно я понимаю, на бумажке можно написать и представить, что это так додумывая, но компьютер работает в позиционной системе счисления и пользуется правилами позиционной системы счисления, следовательно и классификация чисел будет осуществляться по признакам позиционной системы счисления. В таком случае иррациональное число нельзя записать в виде обыкновенной дроби, но можно записать в виде бесконечной не переодической дроби. И возвращаясь к нашему конкурсу, приведите мне пример иррационального числа, которое полностью можно записать в double или float и его нельзя будет записать в виде обыкновенной дроби, достаточно любого из списка википедии.

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

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

Иррациональные числа бесконечны
Вы опять путаете бесконечность числа и бесконечность его записи.

конкурс под названием «Практика критерий истинности»
Давайте начнем прямо с заголовка статьи. Цитирую: «Double, Float — не вещественные числа». Приведите, пожалуйста, пример числа, которое не является вещественным, но которое можно хранить в типах Double и Float. Специальные значения типа NaN не считаем.

Слыхали про чайник Рассела? Если нет, крайне рекомендую ознакомиться)

А так. Ну, я вот могу записать число Пи полностью хоть в double, хоть во float. Вот:

float x = 1.0;

Где x - это значение Пи в системе счисления по основанию Пи. Вот прям полностью влезло.

Только это не будет float (binary32) в терминах IEEE 754

Стандарт не читал, так что, если можно, поконкретнее

В стандарте IEEE 754 описаны только двоичные и десятичные числа. Чисел по основанию Пи там нет.
Да и у большинства компиляторов для числовых литералов подразумевается десятичная система, если не указано никаких модификаторов. Т.е. 1.0 в Пи просто так не превратится.
float x = 1.0;

вы хотели, наверное, x = 10 написать

И так я не увидел достаточного теоритического обоснования почему моя позиция не верна ...

Напоминаю позицию: "Double и Float не вещественные числа т.к. ни одно иррациональное число не входит в область покрываемых значений".

Ищем 10 отличий.

Итак чтобы это статья была признана чушью, а я лично принёс извенения нужно сделать очень лёгкую вещь: Приведите пример любого иррационального числа, принимаются любые из списка в википедии, которое полностью можно записать в double или float.

читаем заголовок: Double, Float — не вещественные числа


чтобы вашу статью не признать чушью, которой она является, ждём от вас пример float или double, не являющего вещественным. да, можно было бы побыть занудой и вспомнить про inf и nan, но вы-то в статье написали совсем другое.


если бы вы написали в статье «c помощью double можно представить числа из подмножества множества конечных двоичных дробей, которое является подмножеством рациональных чисел, которое является подмножеством множества вещественных чисел, которое является подмножеством множества комплексных чисел, которое является подмножеством… ну пусть множества кватернионов, которое в свою очередь является подмножеством… (продолжать можно бесконечно); немного странно, что из этой цепочки мы выбрали именно вещественные числа», то к вашей статье никаких претензий бы не было; но вы почему-то выбрали броский и по сути неверный заголовок.

вдогонку: почему именно вещественные на самом деле понятно: с помощью float или double можно записать вещественные числа с некоторой (приемлемой во многих практических задачах) точностью. и проще использовать float/double везде, где нам нужны в расчётах эти самые вещественные числа не задумываясь о том рациональные они или нет, а если рациональные — то каково основание дроби.
с комплексными числами, например, такой трюк не прокатит, не существует прямого способа записать с помощью double i и 2i, да ещё и отличить их друг от друга.

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

Это намек на то, что, возможно, вам стоит заняться чем-то более полезным для общества, чем оторванные от реальности казуистические рассуждения в стиле "вся рота идет не в ногу, один подпоручик идет в ногу", при этом постоянно противореча самому себе.

Почти все double и float (за небольшим количеством исключений) - вещественные. Но не все вещественные - double или float.

Но всё равно рад за автора, если он взялся за математику. Главное не остановливаться.

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

Непонятно, в чём проблема.
Если один разработчик говорит "вещественное число", а второй его понимает (и в данном случае это верно для абсолютного числа адекватных разработчиков из двух любых точек мира), то терминология работает. А что там формальная математика говорит, никого волновать не должно.

Ну так-то и целые числа (Int, long, и почти все остальные вариации) - не целые числа, потому что настоящие целые числа бесконечные. Что уж тут поделать, пиши вторую статью по этому поводу.

Наш учитель в институте любил фразу "точное решение ни кому не нужно, людям нужно решение с достаточной точностью".

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

К слову в целочисленные типы данных тоже можно далеко не любое число записать.

Ох, ничего себе понаписали комментариев за два дня! Старался их прочитать, чтобы не повториться. Мне понравилась цепочка определений -- вещественные, как рациональные с иррациональными, а иррациональные -- как вещественные без рациональных. Вернее не цепочка, а колечко..

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

А если серьёзно, то я не понял посыла. Зря называем вещественными? Нет, не зря. Это приближение которого хватает в подавляющем большинстве задач. Например константа "пи" с точностью double позволяет вычислить длину окружности заданного диаметра для практически любой задачи. Дальше уже символьные вычисления -- но это отдельная тема.

Деление - не самостоятельная операция, а решение уравнения с умножением. А решение у уравнения может быть не одно, а, например, ни одного (1/0), 2(sqrt(1)), и даже бесконечно много (0/0).

Не очень понятно, что значит не самостоятельная операция. Теория чисел вводит определения последовательно, и логично предположить, что очередные определения могут ссылаться только на те, которые уже есть на данный момент. Если у вас есть целые числа и умножение на них, вы, бесспорно, можете написать уравнение 2x=1, только оно тоже не будет иметь решения. Это тупик.

На самом деле если ту же википедию проскролить чуть дальше содержания, там будет "формальное определение", которое не страдает этой проблемой.

Так же как в школе когда-то давали "определение" целым как "натуральные, им противоположные и ноль". Нету у натуральных чисел противоположных, так как нет вычитания. Уравнение x+5=3 вполне понятно в натуральных, но не имеет там решений. Целые числа определяются через натуральные по аналогии с тем, как рациональные через целые. Вот только в шестом классе, когда часть "математики" начала гордо зваться "алгеброй", это можно было объяснить далеко не всем.

А вас в шестом классе не учили прикладывать гиперссылки на материалы, на которые ссылаетесь?

Нет, когда я учился в шестом классе, интернет был еще не тот, тогда больше книжки читали:) если хотите почитать Википедию, то вот: Формальное определение.

Ну мы опять по кругу ходим. Дроби -- это как числа, противоположные натуральным -- способ объяснить ребенку на пальцах то, что и так почти понятно. Но не определение. Вот надо три пиццы на четверых разделить, мы и разрезаем каждую на четыре части и берём по три куска.

До того, как определены рациональные числа, уравнение 2x=1 не имеет решений. После того, как мы ввели рациональные числа как множество классов эквивалентности над парами целых, ввели операции, доказали корректность этих определений (независимость от выбора представителя класса) вот тогда уже можно сказать "а давайте вместо кортежа (a, b) будем писать a/b и назовем эту запись обыкновенной дробью". Тогда можно решать новые уравнения и так далее.

Точно так же не получится определить алгебраические числа, как корни полиномов. До введения вещественных чисел уравнение x²=2 не имеет решений. Не получится определить квадратный корень как несамостоятельную операцию. Сначала вводим вещественные числа, потом радуемся, что в них больше уравнений решается. Но всё ещё не все.

Надо ли упомянуть, что комплексная мнимая единица не определяется, как квадратный корень из -1?..

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

В классической теории чисел (см. И. Арнольда) натуральные числа расширяются до целых тоже через формальную пару. Это просто приëм, а не критерий сложности той или иной числовой системы.

  • Множество чисел float является подмножеством рациональных чисел.

  • Множество рациональных чисел является подмножеством вещественных.

  • Отношение "подмножество" - транзитивно.

  • ???

  • PROFIT

Это как наш препод по дискретной математике объяснял, что "переменные" в языках программирования - вовсе не переменные, а константы с разными значениями.

ВАЖНО - сама запись π это не само иррациональное число, это всего лишь
его представление, и оно является чем угодно, но не иррациональным
числом. Само Иррациональное число оно бесконечно. Понимаете

Ахахах

Sign up to leave a comment.

Articles