Показано с 1 по 10 из 4477

Тема: разные вопросы новичка

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Дополнил сложением длинных чисел.

    Искренне сомневаюсь в необходимости умножения длинных чисел - физический смысл величины [куб.м*куб.м] не понятен.

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

    Всё требует времени - и отладка длинных вычислений. Мне не хочется реализовывать ради реализации.

    Думаю, что лучшим вариантом будет, если Nsft сможет принять эти 4 регистра и пояснит, какие вычисления требуются. И попробует их реализовать. Если не сможет - завтра вечером после работы попробую.

    Идея вычислений - имеем массив, в котором каждый элемент использует половину разрядов. При операциях проверяется старшая половина и, если она не нулевая, то делается перенос в следующий элемент. Все операции (сложение, вычитание, умножение, деление) выполняются по алгоритму "на бумаге в столбик". Единственно, при делении приходится следить, чтобы перенос не вызвал переполнения разрядной сетки (так не получилось сразу делить на 10^5).
    Вложения Вложения

  2. #2

    По умолчанию

    Цитата Сообщение от FPavel Посмотреть сообщение
    Дополнил сложением длинных чисел.

    Искренне сомневаюсь в необходимости умножения длинных чисел - физический смысл величины [куб.м*куб.м] не понятен.
    .
    Еще раз, что надо посчитать, вот скрин 1 Счётчик WB-MAP3E.png

    0x2200
    младшая часть — значение оставляем «как есть» : 0хb4df hex = 46303 dec (может быть до 65535)
    0x2201
    значение умножаем на 2^16 : 0x0dff hex = 3583 dec, 3583 * 65536 = 234815488 (может быть до 4294901760)
    0x2202
    значение умножаем на 2^32 : 0 * 4294967296 = 0 (сейчас 0, а будет число до 5 знаков, например 65535 * 4294967296=281470681743360 )
    0x2203
    значение умножаем на 2^48 : 0 * 281474976710656 = 0 (сейчас 0, а будет число до 5 знаков, например 65535 * 281474976710656=18446462598732840960 )
    Суммируем результаты : 46303 + 234815488 + 0 + 0 = 234861791. Сумму умножаем на 0.00001 (переносим запятую на 5 знаков влево).
    В итоге получаем 2348.61791 КВт /час

    65535+4294901760+281470681743360+18446462598732840 960=18446744073709551615 - максимально возможное 20-значное число
    умноженное на 0.00001=184467440737095.51615
    Последний раз редактировалось kondor3000; 17.03.2024 в 16:53.

  3. #3
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,574

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Еще раз, что надо посчитать, вот скрин 1 Счётчик WB-MAP3E.png

    0x2200
    младшая часть — значение оставляем «как есть» : 0хb4df hex = 46303 dec
    0x2201
    значение умножаем на 2^16 : 0x0dff hex = 3583 dec, 3583 * 65536 = 234815488
    0x2202
    значение умножаем на 2^32 : 0 * 4294967296 = 0 (сейчас 0, а будет число до 5 знаков)
    0x2203
    значение умножаем на 2^48 : 0 * 281474976710656 = 0 (сейчас 0, а будет число до 5 знаков)
    Суммируем результаты : 46303 + 234815488 + 0 + 0 = 234861791. Сумму умножаем на 0.00001 (переносим запятую на 5 знаков влево).
    В итоге получаем 2348.61791 КВт /час
    ну, каждый регистр по отдельности перевести во флоат и умножить на 0.00001, 0.65536, 42949.67296 и 2814749767.10656 соответственно, далее всё сложить
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  4. #4

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    ну, каждый регистр по отдельности перевести во флоат и умножить на 0.00001, 0.65536, 42949.67296 и 2814749767.10656 соответственно, далее всё сложить
    Как вы в Лоджике с такими числами работать будете? Работать надо с LREAL и LWORD иначе вы просто потеряете часть знаков.
    С целочисленными ещё можно как предложил FPavel , с обычным REAL вообще не получится с 3 и 4 регистром пересчитать.
    Последний раз редактировалось kondor3000; 13.03.2024 в 09:03.

  5. #5
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,574

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Как вы в Лоджике с такими числами работать будете? Работать надо с LREAL и LWORD иначе вы просто потеряете часть знаков.
    т.е. Вас беспокоит сколько знаков после запятой когда целая часть числа перевалит за 2814749767?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  6. #6

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    т.е. Вас беспокоит сколько знаков после запятой когда целая часть числа перевалит за 2814749767?
    Во первых считать надо точно, это счётчик расхода, во вторых потерять вы можете не только посля запятой, но и перед запятой.
    Обычный REAL больше 5 знаков до запятой, тоже может потерять.

Похожие темы

  1. ПЛК 110 - Вопросы новичка?
    от di-s в разделе ПЛК1хх
    Ответов: 21
    Последнее сообщение: 15.04.2025, 16:38
  2. Вопросы новичка!!!
    от sau в разделе ПЛК1хх
    Ответов: 42
    Последнее сообщение: 02.05.2022, 19:57
  3. Вопросы новичка по MasterScada
    от MrNobody в разделе Master SCADA 3
    Ответов: 4
    Последнее сообщение: 04.09.2014, 14:39
  4. Вопросы полного новичка
    от Korion в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 09.02.2010, 10:08
  5. Вопросы новичка по ПЛК
    от Ollegator в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 07.07.2009, 09:29

Ваши права

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