Калькулятор показывает ошибку

Ошибки калькулятора Теперь рассмотрим несколько ошибок, связанных со встроенным в ПЗУ калькулятором. О некоторых из них мы так или иначе уже упоминали в

Содержание

  1. Ошибки калькулятора
  2. 19. Ошибка MOD_DIV.
  3. 20. Ошибка E_TO_FP.
  4. 21. Ошибка INKEY$#0.
  5. Почему калькулятор неправильно считает
  6. Дубликаты не найдены
  7. Комментарий дня
  8. Подсчитаем баги в калькуляторе Windows
  9. Введение
  10. Про неправильное сравнение строк
  11. Утечка памяти в нативном коде
  12. Неуловимое исключение
  13. Пропущенный день
  14. Подозрительные сравнение вещественных чисел
  15. Избыточность
  16. Заключение

Ошибки калькулятора

Теперь рассмотрим несколько ошибок, связанных со встроенным в ПЗУ калькулятором. О некоторых из них мы так или иначе уже упоминали в своих прочих работах.

19. Ошибка MOD_DIV.

Эта ошибка связана с работой кода калькулятора 32h. По этой команде со стека калькулятора должны сниматься два верхних пятибайтных числа, например x и y и вместо них на стек должны отправляться

x MOD y и x DIV y

(именно в этом порядке).

Напомним, что x MOD y это остаток от целочисленного деления x на y, а x DIV y это целая часть частного от деления x на y.

x MOD y = x y*INT(x/y) x DIV y = INT (x/y)

В своих расчетах процедура, обслуживающая эту функцию калькулятора, использует нулевую ячейку памяти калькулятора M0, а с этой ячейкой есть одна особенность. Дело в том, что при вычислении функции INT эта ячейка коррумпируется, если аргумент при INT меньше нуля. Таким образом, функция MOD_DIV калькулятора дает неверный результат, когда x/y число отрицательное.

Ошибки могло бы и не быть, если бы процедура, занимающаяся расчетом этой функции (а она расположена в ПЗУ по адресу 36A0H = 13964 DEC) использовала бы в своих расчетах не нулевую ячейку памяти калькулятора, а первую (M1).

20. Ошибка E_TO_FP.

В системе команд калькулятора есть команда с кодом 3C. Ее назначение умножение числа, находящегося на вершине стека калькулятора на множитель, равный 10 в степени A, где A содержимое аккумулятора микропроцессора.

Вся неприятность в том, что калькулятор после своего включения командой RST 28 не резервирует содержимое аккумулятора, в отличие от содержимого регистра B. Поэтому, к тому времени, как вы воспользуетесь командой калькулятора 3C, есть большая вероятность того, что в аккумуляторе будет не подготовленное вами число, а что то совсем другое.

Единственный выход выйти из калькулятора, прогрузить аккумулятор нужным Вам числом, выполнить нужное умножение вызовом процедуры ПЗУ E_TO_FP и снова вернуться в калькулятор:

LD A, xx CALL 2D4FH RST 28

Процедура E_TO_FP находится в ПЗУ по адресу 2D4FH = 11599 DEC.

21. Ошибка INKEY$#0.

Обычно нулевой поток представляет собой клавиатуру, поэтому естественно предположить, что INKEY$#0 то же самое, что и просто INKEY$ без номера потока.

Тем не менее это не так, и почти необратимо INKEY$#0 выдает пустую символьную строку, что делает эту функцию полностью бесполезной.

Надо также заметить, что в системе команд калькулятора есть команда с кодом 1А, которая служит для расчета функции INKEY$#X, где X число, содержащееся на вершине стека калькулятора. И эта команда калькулятора будет бесполезной, если поток X представляет клавиатуру.

Ошибка находится в подпрограмме ПЗУ по адресу 1634Н=5684 DEC, которая устанавливает канал «X» текущим каналом. В этой подпрограмме по адресу 1638К стоит ошибочная команда RES 5,(FLAGS), выключающая пятый бит системной переменной FLAGS. в результате этого ошибочно отбивается любое нажатие клавиши вместо того, чтобы быть принятый к рассмотрению.

Ошибку можно было бы исправить, если в подпрограмме READ_IN (3645Н = 13893 DEC) сохранить значение системной переменной FLAGS на время вызова подпрограммы CHAN_OPEN (1601Н = 5633 DEC).

На этом мы заканчиваем обзор ошибок и неточностей в ПЗУ стандартного компьютера «ZX Spectrum». Конечно же это не все из того, что оттуда можно выудить, но очень экзотические ошибки, которые проявляются например только на машинах типа «ZX Spectrum+2» и только при подключенном Интерфейсе 1 мы не рассматриваем, поскольку вероятность встретить среди миллионов наших пользователей подобную конфигурацию конечно есть, но она не более сотой доли процента.

Обзор подготовлен по материалам зарубежной печати; основные первоисточники:

1. Dr. Yan Logan, Dr. Frank O’Hara. «The Complete Spectrum ROM Disassembly».

2. Dr. FranK O’Hara «Understanding Your Spectrum».

3. Dr. Yan Logan «Understanding Your Spectrum».

4. Andrew Pennell «Master Your ZX Microdrive».

5. Tony Stratton «Understanding Your Spectrum».

6. Paul Harrison «Understanding Your Spectrum».

7. Stephen Kelly & others «Understanding Your Spectrum».

8. Chris Thornton «Understanding Your Spectrum».

Источник

Почему калькулятор неправильно считает

Тока не смейтесь. 😳

В магазине Комус куплен калькулятор Casio на фирму. Так вот, эта падла неправильно считает проценты. :kto: Обнаружено случайно — бухгалтера сделали мне замечание, мол, ты чо? Хорошо, что сейчас всплыло, а не через год работы этим калькулятором :!a:

А именно: «100» «+» «20» «%» (если набрать такую комбинацию) должно получиться 120. Он выдаёт 125.

Иду в Комус, продавец в лёкгом шоке. :tik Проверили на калькуляторе другой фирмы — там всё чётко. Забрали на эксперитизу.

Умные люди надоумили слупить с Casio лимон баксов — мол, из-за неправильных подсчётов денег ( а что ещё считать на калькуляторе?) на вашем грёбаном калькуляторе потерперпел убытки. Плюс скандал.

Чо думаете? Звонил Саше НМХ — на звонок не ответил. #-o

Дубликаты не найдены

А я в гугле проверил

можно ещё 12345679*8

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

Комментарий дня

Получается, что белые — это негры с нарушенной пигментацией?)

Калькуляторы сегодня встраиваются буквально во все: в часы, телефоны, смартфоны, плееры и прочие электронные устройства. Однако калькулятор, как самостоятельное устройство будет востребован еще очень долго.

Он необходим школьникам и студентам, домохозяйкам и бухгалтерам, инженерам и менеджерам.

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

Существуют разные типы подобных устройств:

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

Бухгалтерский – как правило, настольный с крупными кнопками. Имеет специальные «денежные» кнопки, автоматическое округление и т. п.

Банковский (финансовый) – предназначен для подсчета процентов и других специфических операций.

Инженерный и программируемый калькулятор имеют множество функций и позволяют производить сложные вычисления. Имеют возможность программирования пользователем.

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

Как проверить калькулятор?

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

Если калькулятор не выдаст сообщение об ошибке и не сломается – отлично, самый первый тест пройден.

Задайте несколько примеров на сложение, несложных, типа: 3+6=9. Затем сложнее: 1111х1111=1234321.

Почему именно такой пример? А его запомнить просто! Или еще: 11111х11111=123454321. Есть пример на вычитание: 12345678-123456789=-111111111.

Существуют и другие формулы проверки, которые ничем не отличаются от любых других, кроме того, что легко запоминаются:

  • 12345679х9=111111111
  • 123123123 : 1001001=123
  • 12345679х8=98765432

А вот еще один интересный способ — 12345679*7,2 получится 88888888888 то есть все восьмёрки, сразу видно, что логика не сбита и дисплей весь рабочий!

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

Источник

Подсчитаем баги в калькуляторе Windows

Введение

Калькулятор Windows наверняка знаком каждому пользователю этой операционной системы и не требует особого представления. Теперь же любой пользователь может изучить исходный код калькулятора на GitHub и предложить свои улучшения.

Общественность, например, уже обратила внимание на такую функцию:

которая логирует текст из буфера обмена и, возможно, отправляет его на серверы Microsoft. Но эта заметка не об этом. Хотя подозрительных примеров кода будет много.

Мы проверили исходный код калькулятора с помощью статического анализатора PVS-Studio. Так как код написан на нестандартном C++, многие постоянные читатели блога анализатора усомнились в возможности анализа, но это оказалось возможным. C++/CLI и C++/CX поддерживаются анализатором. Некоторые диагностики выдали ложные предупреждения из-за этого, но ничего критичного не произошло, что помешало бы воспользоваться этим инструментом.

Возможно, вы пропустили новости и о других возможностях PVS-Studio, поэтому хочу напомнить, что кроме проектов на языках C и C++, можно проанализировать код и на языках C# и Java.

Про неправильное сравнение строк

V547 Expression ‘m_resolvedName == L«en-US»’ is always false. To compare strings you should use wcscmp() function. Calculator LocalizationSettings.h 180

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

Дело в том, что здесь неправильно сравниваются строки. Получилось сравнение указателей вместо значений строк. Сравнивается адрес массива символов с адресом строкового литерала. Указатели всегда неравны, поэтому условие всегда ложно. Для правильного сравнения строк следует использовать, например, функцию wcscmp.

Кстати, пока я пишу эту статью, в заголовочном файле массив символов m_resolvedName превратился в полноценную строку типа std::wstring. И теперь сравнение работает правильно. К моменту, когда вы будете читать эту статью, скорее всего, многие другие ошибки тоже будут исправлены благодаря энтузиастам и таким исследованиям, как это.

Утечка памяти в нативном коде

V773 The function was exited without releasing the ‘temp’ pointer. A memory leak is possible. CalcViewModel StandardCalculatorViewModel.cpp 529

Мы видим указатель temp, ссылающийся на массив из 100 элементов, под который выделена динамическая память. К сожалению, память освобождается всего в одном месте функции, во всех остальных местах возникает утечка памяти. Она не очень большая, но это всё равно ошибка для C++ кода.

Неуловимое исключение

V702 Classes should always be derived from std::exception (and alike) as ‘public’ (no keyword was specified, so compiler defaults it to ‘private’). CalcManager CalcException.h 4

Анализатор обнаружил класс, унаследованный от класса std::exception через модификатор private (модификатор по умолчанию, если ничего не указано). Проблема такого кода заключается в том, что при попытке поймать общее исключение std::exception исключение типа CalcException будет пропущено. Такое поведение возникает потому, что приватное наследование исключает неявное преобразование типов.

Пропущенный день

V719 The switch statement does not cover all values of the ‘DateUnit’ enum: Day. CalcViewModel DateCalculator.cpp 279

Подозрительно, что в switch не рассмотрен случай с DateUnit::Day. Из-за этого в календарь (переменная m_calendar) не добавляется значение, связанное с днём, хотя метод AddDays у календаря присутствует.

Ещё несколько подозрительных мест с другим перечислением:

  • V719 The switch statement does not cover all values of the ‘eANGLE_TYPE’ enum: ANGLE_RAD. CalcManager trans.cpp 109
  • V719 The switch statement does not cover all values of the ‘eANGLE_TYPE’ enum: ANGLE_RAD. CalcManager trans.cpp 204
  • V719 The switch statement does not cover all values of the ‘eANGLE_TYPE’ enum: ANGLE_RAD. CalcManager trans.cpp 276

Подозрительные сравнение вещественных чисел

V550 An odd precise comparison: ratio == threshold. It’s probably better to use a comparison with defined precision: fabs(A — B) Epsilon. CalcManager UnitConverter.cpp 778

  • V550 An odd precise comparison. It’s probably better to use a comparison with defined precision: fabs(A — B) Epsilon. CalcManager UnitConverter.cpp 820
  • V550 An odd precise comparison: conversionTable[m_toType].ratio == 1.0. It’s probably better to use a comparison with defined precision: fabs(A — B) Epsilon. CalcManager UnitConverter.cpp 1000
  • V550 An odd precise comparison: sizeToUse != 0.0. It’s probably better to use a comparison with defined precision: fabs(A — B) > Epsilon. CalcViewModel LocalizationService.cpp 270
  • V550 An odd precise comparison: sizeToUse != 0.0. It’s probably better to use a comparison with defined precision: fabs(A — B) > Epsilon. CalcViewModel LocalizationService.cpp 289
  • V550 An odd precise comparison: sizeToUse != 0.0. It’s probably better to use a comparison with defined precision: fabs(A — B) > Epsilon. CalcViewModel LocalizationService.cpp 308
  • V550 An odd precise comparison: sizeToUse != 0.0. It’s probably better to use a comparison with defined precision: fabs(A — B) > Epsilon. CalcViewModel LocalizationService.cpp 327
  • V550 An odd precise comparison: stod(stringToLocalize) == 0. It’s probably better to use a comparison with defined precision: fabs(A — B) starting, что очень странно, ведь туда изначально передали значение false.

    Избыточность

    V560 A part of conditional expression is always true: NumbersAndOperatorsEnum::None != op. CalcViewModel UnitConverterViewModel.cpp 991

    Переменная op уже сравнивалась со значением NumbersAndOperatorsEnum::None и дублирующую проверку можно удалить.

    V728 An excessive check can be simplified. The ‘(A && B) || (!A && !B)’ expression is equivalent to the ‘bool(A) == bool(B)’ expression. Calculator Calculator.xaml.cpp 239

    Это гигантское условное выражение изначально имело ширину 218 символов, но я разбил его на несколько строк для демонстрации предупреждения. А переписать код можно до такого короткого и, главное, читабельного варианта:

    V524 It is odd that the body of ‘ConvertBack’ function is fully equivalent to the body of ‘Convert’ function. Calculator BooleanNegationConverter.cpp 24

    Анализатор обнаружил две функции, которые реализованы одинаково. По названиям функций Convert и ConvertBack можно предположить, что они должны выполнять разные действия, но разработчикам виднее.

    Заключение

    Наверное, каждый открытый проект от Microsoft давал нам возможность показать важность применения методологии статического анализа. Даже на таких маленьких проектах, как калькулятор. В таких крупных компаниях, как Microsoft, Google, Amazon и других, работает много талантливых программистов, но они такие же люди, которые делают ошибки в коде. Применение инструментов статического анализа кода — один из хороших способов повысить качество программ в любых командах разработчиков.

    Проверь свой «Калькулятор», скачав PVS-Studio и попробовав на своём проекте. 🙂

    Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Svyatoslav Razmyslov. Counting Bugs in Windows Calculator

    Источник

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

    Поэтому стоит подстраховываться и заранее проверять точность вычислений выбранных устройств.

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

    Содержание

    1. Общие сведения
    2. Простые способы проверить работоспособность и точность работы калькулятора
    3. Простые способы
    4. Серьезные способы проверки работы калькулятора
    5. Что еще важно при выборе калькулятора?

    Общие сведения

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

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

    Калькуляторы бывают разных типов:

    • Обычный с минимальным набором возможных функций – подходит для большинства пользователей, способен отлично справляться с простыми задачами, отлично подойдет для школьников и тех, кому он нужен для элементарных вычислений.
    • Бухгалтерский калькулятор, как видно из названия предназначен для специалистов в сфере бухгалтерии, как правило, он настольный, имеет специальные «денежные» кнопки, а так же специфические функции, например, автоматического округления, возможность автоматического вычисления прибыли и другие.
    • Программируемый или инженерный калькулятор – имеет большое количество дополнительных функций, который могут производить довольно сложные вычислительные процедуры. Отличительной особенностью данного типа является возможность индивидуального программирования.
    • Банковский или финансовый калькулятор – ориентирован на специфические банковские операции, например, для расчета процентов.
    • Графический калькулятор способен выводить на дисплей графики и рисунки.

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

    Простые способы проверить работоспособность и точность работы калькулятора

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

    Простые способы

    • Простые способы проверить точность калькулятораПопробуйте сложить или перемножить большие числа, если калькулятор не выдаст ошибки и не отключить, то можно считать, что первый тест успешно пройдет.
    • Набрать на дисплее число 12345679 (все простые числа кроме восьмерки) и умножить его на число 9. В итоге должно получиться, если калькулятор работает правильно, — 111111111. Это говорит о том, что калькулятор считает правильно и не глючит.
    • Если ввести пример 1111*1111, то устройство должно в ответ выдать число 1234321, если ввести пример 12345678-123456789, то результатом вычислений должно стать число -111111111
    • Если набрать число 111111111, а затем возвести его в квадрат, то должно получиться 12345678987654321, это свидетельствует о корректности работы устройства.
    • Этот пример позволит проверить не только логику расчета, но работоспособность всего дисплея: 12345679*72 в ответ должны получить 88888888888. Чтобы проверить все цифры, можно использовать вот эти примеры:

    12345679*9 = 111111111
    12345679*18 = 222222222
    12345679*27 = 333333333
    12345679*36 = 444444444
    12345679*45 = 555555555
    12345679*54 = 666666666
    12345679*63 = 777777777
    12345679*72 = 888888888
    12345679*81 = 999999999

    • Последовательное введение данных следующего алгебраического примера 100*10/2+16*4 должно отобразить на экране ответ в виде числа 564. Это так же говорит о корректности его вычислений и должно снимать вопросы с точностью его работы.

    Серьезные способы проверки работы калькулятора

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

    Если полученный ответ приблизительно будет равен «-1», то можно смело доверять вашему калькулятору самые сложные расчеты, и не беспокоиться за точность вычислений.

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

    Что еще важно при выборе калькулятора?

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

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

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

    ( 1 оценка, среднее 2 из 5 )

    18 Ошибка проверки синтаксиса.

    Эта ошибка проявляется только на машинах 48К, а на машинах 128К она мудро игнорируется.

    Дело в том, что у Вас есть возможность ввести в программную строку такие ключевые слова, как ERASE, MOVE, FORMAT, CAT, например

    ERASE симв. строка

    MOVE строка, строка FORMAT строка

    CAT

    Очевидно, что эти команды не могут быть выполнены, если у Вас не подключена соответствующая периферия, например INTERFACE ONE с микродрайвом.

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

    На 128 килобайтных машинах тоже можно ввести такие ключевые слова, но при запуске программы они будут игнорироваться и восприниматься так, как воспринимается оператор RЕМ.

    Ошибки калькулятора

    Теперь рассмотрим несколько ошибок, связанных со встроенным в ПЗУ калькулятором. О некоторых из них мы так или иначе уже упоминали в своих прочих работах.

    19. Ошибка MOD_DIV.

    Эта ошибка связана с работой кода калькулятора 32h. По этой команде со стека калькулятора должны сниматься два верхних пятибайтных числа, например x и y и вместо них на стек должны отправляться

    x MOD y и x DIV y

    (именно в этом порядке).

    Напомним, что x MOD y это остаток от целочисленного деления x на y, а x DIV y это целая часть частного от деления x на y.

    Таким образом,

    x MOD y = x y*INT(x/y) x DIV y = INT (x/y)

    Всвоих расчетах процедура, обслуживающая эту функцию калькулятора, использует нулевую ячейку памяти калькулятора M0, а с этой ячейкой есть одна особенность. Дело в том, что при вычислении функции INT эта ячейка коррумпируется, если аргумент при INT меньше нуля. Таким образом, функция MOD_DIV калькулятора дает неверный результат, когда x/y число отрицательное.

    Ошибки могло бы и не быть, если бы процедура, занимающаяся расчетом этой функции (а она расположена в ПЗУ по адресу 36A0H = 13964 DEC) использовала бы в своих расчетах не нулевую ячейку памяти калькулятора, а первую (M1).

    20.Ошибка E_TO_FP.

    Всистеме команд калькулятора есть команда с кодом 3C. Ее назначение умножение числа, находящегося на вершине стека калькулятора на множитель, равный 10 в степени A, где A содержимое аккумулятора микропроцессора.

    Вся неприятность в том, что калькулятор после своего включения командой RST 28 не резервирует содержимое аккумулятора, в отличие от содержимого регистра B. Поэтому, к тому времени, как вы воспользуетесь командой калькулятора 3C, есть большая вероятность того, что в аккумуляторе будет не подготовленное вами число, а что то совсем другое.

    Единственный выход выйти из калькулятора, прогрузить аккумулятор нужным Вам числом, выполнить нужное умножение вызовом процедуры ПЗУ E_TO_FP и снова вернуться в калькулятор:

    Endcalc

    LD A, xx CALL 2D4FH RST 28

    Процедура E_TO_FP находится в ПЗУ по адресу 2D4FH = 11599 DEC.

    21. Ошибка INKEY$#0.

    Обычно нулевой поток представляет собой клавиатуру, поэтому естественно предположить, что INKEY$#0 то же самое, что и просто INKEY$ без номера потока.

    Тем не менее это не так, и почти необратимо INKEY$#0 выдает пустую символьную строку, что делает эту функцию полностью бесполезной.

    Надо также заметить, что в системе команд калькулятора есть команда с кодом 1А, которая служит для расчета функции INKEY$#X, где X число, содержащееся на вершине стека калькулятора. И эта команда калькулятора будет бесполезной, если поток X представляет клавиатуру.

    Ошибка находится в подпрограмме ПЗУ по адресу 1634Н=5684 DEC, которая устанавливает канал «X» текущим каналом. В этой подпрограмме по адресу 1638К стоит ошибочная команда RES 5,(FLAGS), выключающая пятый бит системной переменной FLAGS. в результате этого ошибочно отбивается любое нажатие клавиши вместо того, чтобы быть принятый к рассмотрению.

    Ошибку можно было бы исправить, если в подпрограмме READ_IN (3645Н = 13893 DEC) сохранить значение системной переменной FLAGS на время вызова подпрограммы CHAN_OPEN (1601Н = 5633 DEC).

    На этом мы заканчиваем обзор ошибок и неточностей в ПЗУ стандартного компьютера «ZX Spectrum». Конечно же это не все из того, что оттуда можно выудить, но очень экзотические ошибки, которые проявляются например только на машинах типа «ZX Spectrum+2» и только при подключенном Интерфейсе 1 мы не рассматриваем, поскольку вероятность встретить среди миллионов наших пользователей подобную конфигурацию конечно есть, но она не более сотой доли процента.

    Обзор подготовлен по материалам зарубежной печати; основные первоисточники:

    1.Dr. Yan Logan, Dr. Frank O’Hara. «The Complete Spectrum ROM Disassembly».

    2.Dr. FranK O’Hara «Understanding Your Spectrum».

    3.Dr. Yan Logan «Understanding Your Spectrum».

    4.Andrew Pennell «Master Your ZX Microdrive».

    5.Tony Stratton «Understanding Your Spectrum».

    6.Paul Harrison «Understanding Your Spectrum».

    7.Stephen Kelly & others «Understanding Your Spectrum».

    8.Chris Thornton «Understanding Your Spectrum».

    На чтение 3 мин Просмотров 1к. Опубликовано 08.09.2021

    Тока не смейтесь. 😳

    В магазине Комус куплен калькулятор Casio на фирму. Так вот, эта падла неправильно считает проценты. :kto: Обнаружено случайно — бухгалтера сделали мне замечание, мол, ты чо? Хорошо, что сейчас всплыло, а не через год работы этим калькулятором :!a:

    А именно: «100» «+» «20» «%» (если набрать такую комбинацию) должно получиться 120. Он выдаёт 125.

    Иду в Комус, продавец в лёкгом шоке. :tik Проверили на калькуляторе другой фирмы — там всё чётко. Забрали на эксперитизу.

    Умные люди надоумили слупить с Casio лимон баксов — мол, из-за неправильных подсчётов денег ( а что ещё считать на калькуляторе?) на вашем грёбаном калькуляторе потерперпел убытки. Плюс скандал.

    Чо думаете? Звонил Саше НМХ — на звонок не ответил. #-o

    Дубликаты не найдены

    А я в гугле проверил

    можно ещё 12345679*8

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

    Комментарий дня

    Получается, что белые — это негры с нарушенной пигментацией?)

    Калькуляторы сегодня встраиваются буквально во все: в часы, телефоны, смартфоны, плееры и прочие электронные устройства. Однако калькулятор, как самостоятельное устройство будет востребован еще очень долго.

    Он необходим школьникам и студентам, домохозяйкам и бухгалтерам, инженерам и менеджерам.

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

    Существуют разные типы подобных устройств:

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

    Бухгалтерский – как правило, настольный с крупными кнопками. Имеет специальные «денежные» кнопки, автоматическое округление и т. п.

    Банковский (финансовый) – предназначен для подсчета процентов и других специфических операций.

    Инженерный и программируемый калькулятор имеют множество функций и позволяют производить сложные вычисления. Имеют возможность программирования пользователем.

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

    Как проверить калькулятор?

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

    Если калькулятор не выдаст сообщение об ошибке и не сломается – отлично, самый первый тест пройден.

    Задайте несколько примеров на сложение, несложных, типа: 3+6=9. Затем сложнее: 1111х1111=1234321.

    Почему именно такой пример? А его запомнить просто! Или еще: 11111х11111=123454321. Есть пример на вычитание: 12345678-123456789=-111111111.

    Существуют и другие формулы проверки, которые ничем не отличаются от любых других, кроме того, что легко запоминаются:

    • 12345679х9=111111111
    • 123123123 : 1001001=123
    • 12345679х8=98765432

    А вот еще один интересный способ — 12345679*7,2 получится 88888888888 то есть все восьмёрки, сразу видно, что логика не сбита и дисплей весь рабочий!

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

    Понравилась статья? Поделить с друзьями:

    Читайте также:

  • Калькулятор пишет sync error
  • Калькулятор грамматических ошибок
  • Калькулятор абсолютной ошибки
  • Каллиграфические ошибки это
  • Каллиграфические ошибки примеры

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии