Нативный код / Интерактивный разбор / Чтение: 18 мин

Калькулятор Windows: почему 200 + 10% равно 220?

Исследуйте клавишу процентов калькулятора Windows с REA. Сравните сложение и умножение, изучите ветвление и проверьте демонстрацию с двумя операндами.

На этой странице

01. Попробуйте перед разбором

Оставьте числа 200 и 10. Нажмите «Применить %»: второе число станет 20. Нажмите «Затем =», чтобы получить 220. Переключитесь на умножение и повторите: второе число станет 0.1, а итоговый результат — 20.

Эксперимент с процентамиИГРАЙТЕ / НАБЛЮДАЙТЕ / ОБЪЯСНЯЙТЕ
ОБЫЧНЫЙ РЕЖИМ / ПРОЦЕНТЫ01 / ВВОД

200 + 10%

10

Нажмите %, чтобы увидеть изменение второго числа.

Попробуйте сложение, затем умножение с теми же двумя числами.

Эксперимент с процентами и двумя операндами, а не полный эмулятор калькулятора Windows.

Что вы создадите

Эксперимент с процентами и двумя операндами и матрицу тестов, проверяющую промежуточное состояние и итоговый ответ.

Перед исследованием

Лаборатория не требует настройки. Для анализа бинарного файла нужны доступная вам для исследования установка калькулятора Windows и настроенный провайдер анализа нативного кода. Открытый код Microsoft позволяет выполнить дополнительную сверку. Настроить REA →

02. Запишите последовательность нажатий

Задайте точный вопрос: что происходит, когда пользователь вводит 200, выбирает сложение, вводит 10, нажимает процент, затем равно? Запишите содержимое дисплея после процента и после равно. Промежуточный операнд сообщает больше, чем один итоговый ответ.

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

Скопируйте этот запрос для исследования
Исследуй с REA поведение процентов в обычном режиме калькулятора Windows. Сравни последовательности 200 + 10 % = и 200 × 10 % =. Определи установленный модуль, отвечающий за арифметику, затем проследи ветвь процентов и преобразование операнда в зависимости от оператора. Отдельно представь наблюдаемые инструкции, интерпретацию исходников и результаты реального ввода через графический интерфейс.

03. Расчёт может находиться не в программе запуска

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

В исследовании исходного проекта арифметика находилась в CalcViewModel.dll, а не в небольшом загрузчике calc.exe. Функции для анализа выбирались с участием аналитика. Открытый код Microsoft помог интерпретировать идентификаторы операторов; соответствие этого кода точному коммиту установленного бинарного файла доказано не было.

  • В каком файле находится арифметическая ветвь?
  • Что выбирает процент и где фиксируется предыдущий оператор?
  • Где хранятся предыдущее значение и текущий ввод?
  • Какие арифметические вспомогательные функции вызываются в каждой ветви?

04. Сначала воссоздайте преобразование операнда

При сложении и вычитании введённый процент считается от первого числа. При умножении и делении он превращается в долю от 100. Ожидающий оператор применяется после этого. Разделите эти два этапа в реализации и интерфейсе.

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

Скопируйте этот запрос для исследования
Реализуй только это поведение процентов для двух операндов в обычном режиме: + и − преобразуют ввод в entry × (first / 100); × и ÷ преобразуют его в entry / 100. Сделай преобразованный операнд доступным для тестов. Применяй ожидающий оператор только по нажатию равно. Обработай деление на ноль, пустой ввод и сброс. Не заявляй о совместимости повторных нажатий или научного режима.

05. Проверяйте промежуточное значение, а не только ответ

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

Если результат нового запуска в Windows отличается, проверьте режим и точный порядок ввода перед изменением формулы. Сохраните последовательность клавиш и состояния дисплея. Исходный отчёт не заявлял о завершённой проверке ввода через графический интерфейс Windows, поэтому не приписывайте ему такую проверку.

06. Сравните известные результаты

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

Последовательность клавишПосле %После =
200 + 10 % =20220
200 − 10 % =20180
200 × 10 % =0.120
200 ÷ 10 % =0.12 000
50 + 20 % =1060
6 × 6 % =0.060.36
200 ÷ 0 % =0Не определено

Сохраните оба файла в одной папке. Запустите проверки с Node.js; устанавливать пакеты не требуется.

Терминал
node check-case-labs.mjs

07. Что действительно проверено?

Этот сайт выполняет численные тесты собственной реализации с двумя операндами, включая опубликованные примеры Microsoft. Он не запускает набор тестов Microsoft и не автоматизирует установленное приложение Windows. Повторные нажатия процента и равно, полный разбор выражений и научный режим не входят в демонстрацию.

Записанные результаты численных тестов этого сайта →

Источники: Отчёт REA об исследовании калькулятора · Ветвь процентов Microsoft в зафиксированной версии. Руководство, иллюстрации и браузерные эксперименты созданы независимо.

Следующий экспериментПочему динозавр всё время ускоряется? →

Впервые используете инструмент? Что такое REA? · Как мы проверяем руководства