Double, Float — не вещественные числа
- воскресенье, 17 июля 2022 г. в 00:38:41
Во многих источниках тип double и float, числа с плавающей запятой/точкой зачем-то называют вещественными. Такое чувство что кто-то когда-то совершил ошибку или не внимательно написал эту глупость и все как один начали её повторять, совершенно не задумываясь о чём они говорят.
Ладно это были бы просто троечники студенты и любители, так эту ошибку говорят и те, кто обучают специалистов. И эта проблема терминологии не одного ЯП, их правда много (Java, C++, C#, Python, JS и т.д.) везде, где бы я не искал, всегда находятся статьи, ответы, лекции, где дробные числа называют вещественными!
Вот ОЧЕНЬ МАЛЕНЬКАЯ выборка:
https://javarush.ru/quests/lectures/questsyntaxpro.level04.lecture06 - JavaRush
https://docs-python.ru/tutorial/osnovnye-vstroennye-tipy-python/tip-dannyh-float-veschestvennye-chisla/ - Docs Python3
http://cppstudio.com/post/310/ - CppStudio
https://ru.wikipedia.org/wiki/Система_типов_Си - даже всеми любимая Wikipedia!
Ещё раз повторюсь это очень маленькая выборка, можете набрать в гугл поиске, по ключевым словам, и удостовериться что их полно.
Начнём с простого, что такое вещественное число коим называют double и float. Будет немного формул, но не пугайтесь, прочитайте пожалуйста до конца, они очень простые, к каждой я даю интуитивное объяснение.
Определение можете прочитать в Википедии или дочитать до конца мою статью, где я простым языком скажу или вы сами поймёте, но нужно проследить за мыслью, которую я хочу донести до вас. Я напишу формулой из теории множеств:
R = Q ∪ I
Где, R - множество вещественных чисел;
Q - множество рациональных чисел;
I - множество иррациональных чисел.
Так же Q ⊂ R и I ⊂ R.
Расшифровка тем, кто не очень с теорией множеств. Вещественные числа эта числа которые включают в себя Рациональные и Иррациональные числа (R = Q ∪ I), т.к. Вещественные числа включают их в себя, то Рациональные числа и Иррациональные числа являются подмножеством множества Вещественных (Q ⊂ R и I ⊂ R), причём строго, то есть Q != R и I != R, это очевидная мысль, но её требуется подчеркнуть.
Теперь к самому интересному, какие числа называются Рациональными и Иррациональными (представляю себя преподавателем начальных курсов технических вузов).
Начнём с Рациональных, возьмём определение из википедии.
Рациональное число (от лат. ratio «отношение, деление, дробь») — число, которое можно представить в виде обыкновенной дроби m/n, где m — целое число, а n — натуральное.
Так же стоит отметить, что Рациональные включают в себя Целые и Натуральные числа (-1, 0, 1, 2 ...) их можно выразить в виде дроби, 1 = 1/1, 2 = 2/1, -1 = -1/1, 0 = 0/1 и т.д.
Почему это важно? Потому что Иррациональные числа не включают в себя Целые и Натуральные числа, это отдельный класс чисел.
Берём определение из Википедии.
Иррациональное число — это вещественное число, которое не является рациональным, то есть не может быть представлено в виде обыкновенной дроби m/n, где m,n — целые числа, n != 0. Иррациональное число может быть представлено в виде бесконечной непериодической десятичной дроби.
Так же приведу примеры иррациональных чисел, чтобы стало понятно: π (число пи), e (число Эйлера), √2.
Вы начали что-то подозревать? Если нет я помогу вам.
Первое предложение определения — это то, о чём я вам говорил, то, что Иррациональные числа — это отдельный класс чисел и он не включает в себя Целые и Натуральные.
Но самое важное здесь это второе предложение "Иррациональное число может быть представлено в виде бесконечной непериодической десятичной дроби.".
Что это значит? Заметили, что в примерах я дал вам буквенное обозначение? Это не просто так, это представление иррационального числа, ВАЖНО - сама запись π это не само иррациональное число, это всего лишь его представление, и оно является чем угодно, но не иррациональным числом. Само Иррациональное число оно бесконечно. Понимаете?
То есть его невозможно записать по определению. Никакой памяти в компьютере не хватит чтобы его записать. Это невозможно!
И мало того что в большинстве (я не проверял прям на всех, но очень сомневаюсь, что хотя бы в одном это есть) языков в которых используется термин Вещественный тип нельзя чисто синтаксически сделать запись по типу: "double a = π", попросту будет ошибка компиляции, так ещё если и возможно с помощью латинских букв подключая библиотеки, то в конечном-то итоге эта переменная будет ссылаться на конечное представление, а то есть рациональное этого иррационального числа!
Всё с чем мы можем работать это ТОЛЬКО РАЦИОНАЛЬНЫЕ ЧИСЛА, представления иррациональных чисел они ТОЖЕ рациональные и ТОЛЬКО рациональные. Они большие, они могут быть ооооочень большими, но они всё равно рациональные!
R = Q ∪ I, если мы исключаем I из-за невозможности работы с ними в прямом смысле без представлений получается R' = R\I, R' = Q, а Q у нас рациональные числа.
Так почему же так много людей и весьма неглупых всё ещё допускают эту простую ошибку? Эту ошибку можно было описать в пару предложений, но я хотел донести до вас последовательно как к этому прийти, используя общепринятую терминологию.
Спасибо.
P.S. Это моя оригинальная статья AfterWing, не является переводом, доработкой другой какой-либо статьи на русском/английском и др. языках.