![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Все-таки дайте себе труд отделить мух от котлет.
Видите ли, способ машинного представления данных не зависит ни от языка программирования, ни от качества программирования.
А к разработчикам есть очень много обоснованных претензий, в отличие от Вашей, и они их в меру возможности рихтуют ;).
Успехов в изучении мат.части.
О машинном представлении данных простейшая ссылка в моём предыдущем комментарии. Это изученная мной по Вашей рекомендации мат. часть для Вас.
Поддерживаю .
Число 0.7 будет представлено в памяти компьютера точно в виде так называемого порядка - в нашем примере это 0 (или сдвинутого порядка) и мантиссы 7 (в двоичной форме 111). Остальные биты до конца разрядной сетки будут заполнены нулями. Другое дело, когда бесконечная дробь возникает в результате каких-нибудь операций...
Ничего подобного. Вы ошибаетесь дважды.
Во-первых, вы в своём примере умножаете 0.7 по человеческим правилам – на 10 и получаете порядок -1 (не 0, как вы написали) и мантиссу 7. Надо умножать по компьютерным правилам - на степени двойки. Для того, чтобы понять свою ошибку, попробуйте умножить 0.7 на ЛЮБУЮ степень двойки, – вы никогда не получите ЦЕЛОГО числа.
Во-вторых, в соответствии со стандартом IEEE 754 мантисса в числах с плавающей точкой всегда хранится нормализованной в диапазон [1..2). Она не может быть >= 2 или < 1. Это делается для того, чтобы не хранить старший значащий разряд мантиссы. Таким образом, числа, меньшие единицы домножаются на степени двойки, пока не попадут в этот диапазон, но остаток всё равно представляет собой бесконечную дробь. 0.7 представлено, как 1.4 * 2^(-1). Дробная часть мантиссы, – 0.4, – представляет собой в двоичной записи бесконечную дробь: 0.011001100110011...
Не верите, – попробуйте сами посчитать. Собственно, это очевидно уже исходя из моего первого утверждения.
Итак, повторю фундаментальный критерий для проверки. Если число при умножении на ЛЮБУЮ степень 2 НИКОГДА не получается целым, значит в двоичной системе это число записывается бесконечной дробью.
Ничего подобного. Вы ошибаетесь дважды.
Во-первых, вы в своём примере умножаете 0.7 по человеческим правилам – на 10 и получаете порядок -1 (не 0, как вы написали) и мантиссу 7. Надо умножать по компьютерным правилам - на степени двойки. Для того, чтобы понять свою ошибку, попробуйте умножить 0.7 на ЛЮБУЮ степень двойки, – вы никогда не получите ЦЕЛОГО числа.
Во-вторых, в соответствии со стандартом IEEE 754 мантисса в числах с плавающей точкой всегда хранится нормализованной в диапазон [1..2). Она не может быть >= 2 или < 1. Это делается для того, чтобы не хранить старший значащий разряд мантиссы. Таким образом, числа, меньшие единицы домножаются на степени двойки, пока не попадут в этот диапазон, но остаток всё равно представляет собой бесконечную дробь. 0.7 представлено, как 1.4 * 2^(-1). Дробная часть мантиссы, – 0.4, – представляет собой в двоичной записи бесконечную дробь: 0.011001100110011...
Не верите, – попробуйте сами посчитать. Собственно, это очевидно уже исходя из моего первого утверждения.
Итак, повторю фундаментальный критерий для проверки. Если число при умножении на ЛЮБУЮ степень 2 НИКОГДА не получается целым, значит в двоичной системе это число записывается бесконечной дробью.
Вы правы. У меня ум за разум зашёл ... Спасибо, что дали себе труд разместить здесь подробный комментарий.