Origin | Русская версия

Calc – Java калькулятор для мобильных телефонов и MIDP устройств

Актуальная версия: 4.52, список изменений
Авторские права: 2003-2009 Roar Lauritzsen, roarl at users sourceforge net
Демо: нажмите здесь, чтобы открыть демонстрационный апплет, который поможет вам во время чтения этого текста. Для работы апплета у вас должен быть установлен java-плагин
Разработка и улучшения: примите участие в разработке приложения на http://sourceforge.net/projects/midp-calc, где доступен исходный код под GPL лицензией
Пожертвования: если вы считаете эту программу полезной, вы можете поспособствовать дальнейшему развитию проекта, пожертвовав автору проекта к примеру 10$ здесь:

Введение

Calc – Java калькулятор для MIDP или J2ME-устройств, таких как совместимые с Java телефоны или КПК. Первоначально он был создан для Sony Ericsson T610, который был моим первым телефоном с поддержкой Java, но имел настолько убогий встроенный калькулятор, что я был просто вынужден разработать данное приложение.

Calc работает практически также как старый добрый микрокалькулятор HP с обратной бесскобочной записью, но имеет стек на 16 чисел, и на экране вы можете видеть несколько чисел из стека одновременно. Я выбрал обратную бесскобочную запись потому, что она позволяет сократить количество нажатий клавиш, вам требуется только клавиша ENTER вместо клавиш "(", ")" и "=". Полезна также возможность видеть промежуточные результаты непосредственно в стеке.

Используя Real Java floating point library, Calc имеет 63-битную внутреннюю точность представления чисел, соответствующую приблизительно 19-разрядной точности представления десятичных чисел, что намного больше точности обычных калькуляторов и компьютеров. Калькулятор также работает с 31-битным представлением степени, что позволяет ему обрабатывать числа до 4,197·10323228496. Весьма удобно, если вы хотите посчитать факториал числа 40000000.

Отказ от ответственности

Java-приложение Calc поставляется "КАК ЕСТЬ" без предоставления каких-либо гарантий и без возмещения какого-либо ущерба, который может возникнуть в результате использования приложения. Короче: я могу ошибиться. Вы тоже.

Загрузка

Вы можете загрузить Calc непосредственно в ваш телефон или MIDP-устройство, используя следующие ссылки:
http://midp-calc.sf.net/Calc.jad, или
http://midp-calc.sf.net/Calc.jar

Другие версии для разных моделей телефонов: Версия для Nokia дает вам полноэкранный интерфейс и более удобное расположение клавиш "ENTER" и "+". Также корректно обрабатывается нажатие на центр джойстика, поэтому клавиша вызова может использоваться как клавиша "С". Многие телефоны, например SonyEricsson, поддерживают версию Nokia и, фактически, я предпочитаю использовать именно ее на своем K700i. Версия MIDP 2.0 функционально беднее, но также поддерживает полноэкранный режим. Версия для Siemens (в настоящее время только версия 3.00) сделана человеком по имени Michael Schierl. Она переназначает функции клавиш (как описано здесь) для совместимости с Siemens A65. Также она может работать и на других телефонах Siemens.
http://midp-calc.sf.net/CalcNokia.jad, -.jar
http://midp-calc.sf.net/CalcMIDP2.jad, -.jar
http://midp-calc.sf.net/CalcSiemens.jad, -.jar

Инструкция по загрузке: Если ваш телефон поддерживает выход в интернет, введите в его браузере один из вышеуказанных URL. Сначала попробуйте ввести ссылку на ".jad", если это не сработает, тогда попробуйте ".jar".Если ваш телефон не имеет доступа в интернет, вам потребуется компьютер, возможно с дополнительным программным обеспечением для связи с телефоном. Загрузите на компьютер одну из вышеуказанных ссылок, а затем передайте загруженный файл на телефон. В этом случае вам сначала стоит попробовать загрузить ".jar".

Я заметил одну вещь, когда обновлялся со своего SonyEricsson K700i и которая также может сработать и на других телефонах. После загрузки телефон сказал "The new version may be from another source. Trust source?" (Новая версия, возможно, взята из другого источника. Доверять этому источнику?). Если я НЕ отвечал "yes", программная память очищалась.

→ → Старые версии

Совместимость с устройствами

Начиная с версии 3.00 размер приложения превысил 64кБ. Это означает, что на некоторых старых телефонах Calc больше не будет работать. Для владельцев таких телефонов остается только использовать версию 2.08. Начиная с версии 4.50 размер данных, с которыми работает Calc, превысил 128кБ. Это опять означает, что на некоторых старых телефонах программа не будет работать (среди них старый добрый Sony Ericsson T610). На таких телефонах попробуйте версию 4.00.

Следующие MIDP-телефоны/устройства были протестированы с Calc v3.00 и более поздними версиями:1 устройство совместимо с Midp 1.0 версией приложения
2 устройство совместимо с Midp 2.0 версией приложения
N устройство совместимо с версией для Nokia
S устройство совместимо с версией для Siemens
(если ничего не указано, значит мною небыло получено достаточно достоверной информации о совместимости с устройством)


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

(Модели телефонов в списке не отсортированы каким-либо особым образом)


Руководство пользователя

Содержание:
Управление
Установка
Обратная бесскобочная запись
Меню
Функции
Основные (basic)
Математические (math)
Тригонометрические (trig)
Битовые операции (bitop)
Специальные функции (special)
Операции со стеком (stack)
Операции с памятью (mem)
Статистические расчеты (stat)
Финансовые вычисления (finance)
Преобразование величин и константы (conv)
Дата и время (time)
Операции с единицами измерений (unit)
Константы (const)
Режимы (mode)
Представление чисел (number)
Программирование (prog)
Системы счисления (base)
Мониторинг (monitor)
Система (sys)
Дополнительные замечания
Обработка результатов переполнения
Операции с комплексными числами
Операции с матрицами
Операции с единицами измерения
Финансовые вычисления
Операции с датами
Константы
Режим мониторинга
Программирование
Построение графиков
Двоичные операции

Управление

Прочитайте по крайней мере этот раздел. Наиболее эффективное и удобное управление в программе Calc возможно при установке приложения на телефон, имеющий 5-позиционный джойстик, клавишу стирания, 12 цифровых клавиш и две софтовые клавиши (те, которые расположены под дисплеем). Клавиши имеют следующее назначение:

Установка

При первом запуске калькулятора может появиться парочка диалоговых окон. Это сделано для того, чтобы иметь возможность пользоваться калькулятором на телефонах, которые имеют меньше функциональных клавиш, чем T610 (большинство телефонов Nokia как раз такие). Если вы неправильно ответили на вопросы в этих диалогах, вы можете вернуться к ним позже, используя команду "reset".

Вначале для того чтобы убедиться, что команды "ENTER" и "+" расположены правильно, программа перепробует несколько вариантов раскладки клавиатуры, до тех пор пока вы не ответите утвердительно на вопрос о том, что вы видите слово "no" над левой софтовой клавишей, а слово "yes" над правой софтовой клавишей. Софтовые клавиши – это две кнопки, расположенные непосредственно под экраном телефона. На некоторых телефонах "yes" и "no" могут выводиться над левой софт-клавишей, которая называется "Опции", а над правой не будет ничего. Если вы ответите утвердительно на такую раскладку, то доступ к "ENTER" и "+" будет осуществляться именно в такой извращенной манере. В версии Nokia этот диалог пропускается.

Затем, чтобы убедиться что клавиша "clear"или "c" доступна и правильно распознается программой, вас попросят нажать на нее. Если на вашем аппарате нет такой кнопки, нажмите вместо нее "#" – это будет ваша кнопка стирания. А кнопка "*" будет волшебным образом выполнять функции ввода знаков минуса, десятичной точки и показателя степени. В некоторых моделях Motorola кнопка "menu" может использоваться как "clear". Если вы устанавливаете версию Nokia, будьте предельно внимательны на данном этапе. Если в вашем телефоне джойстик имеет центральную кнопку, то значит в Calc вы сможете использовать зеленую клавишу своего телефона как "clear". В этом случае можете нажать dial (зеленая клавиша) вместо "C". Если же джойстик аппарата не имеет центральной кнопки, то вместо нее вам придется использовать клавишу dial. Тогда, если в вашем телефоне нет еще и кнопки "C", нажимайте "#". Вам может прийти в голову идея использовать красную кнопку (отбой) для выполнения функции "C". Но в большинстве случаев нажатие на красную кнопку приведет к немедленному закрытию программы и настройка не будет завершена. Если такое произошло, используйте "mode/sys/reset" для повторного запуска процесса настройки.

На следующем этапе производится настройка шрифта. Для улучшения отображения символов на цветных дисплеях Calc использует шрифт с субпиксельным сглаживанием. С точки зрения пользователя единственная тонкость здесь в том, что разные дисплеи используют различный порядок чередования цветных точек (RGB или BGR). От вас потребуется лишь указать тот шрифт, который выглядит более четко. Следует учесть два момента. Во-первых, команды "left" и "right" (слева и справа) могут быть перепутаны местами, если вы ошиблись на самом первом этапе настройки. И во-вторых, некоторые дисплеи могут иметь нестандартное чередование цветных пикселей. В таких дисплеях чередование цветов идет по вертикали, а не по горизонтали, как в большинстве случаев. Такие дисплеи не поддерживаются программой и символы на них всегда будут выглядеть несколько необычно (будут иметь цветную окантовку). В таком случае используйте системный шрифт (system font).

Если в вашем телефоне нет 5-позиционного джойстика, в большинстве случаев Nokia-версия программы позволит вам использовать зеленую клавишу (dial, вызов) вместо центральной кнопки джойстика. Если у вас в телефоне только 2-х позиционный джойстик или его нет совсем, то в этом случае при активированном меню в роли джойстика у вас будут выступать клавиши 2, 4, 5, 6 и 8. С таким аппаратом вам остается только надеяться, что вы сможете активировать меню зеленой клавишей dial или какой-нибудь еще кнопкой, т.к. иначе вы, к сожалению, оказываетесь в пролете.


Обратная бесскобочная запись

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

Основой реализации обратной бесскобочной записи в нашем калькуляторе является числовой стек. Стек можно изобразить в виде столбика чисел, записанных одно над другим. Каждая строчка в этом столбике содержит одно число и называется регистром стека. Вначале работы стек пуст. Когда вы вводите число и нажимаете "ENTER" это число попадает в самый нижний регистр стека, а стек вырастает вверх на одно число. При вводе следующего числа, числа которые уже находятся в стеке перемещаются вверх, чтобы освободить место для нового числа. Чтобы уменьшить стек вы можете либо очистить его нижний регистр с помощью клавиши "clear", либо объединить числа в двух нижних регистрах стека, используя какую-либо математическую операцию.

Нижний регистр в стеке принято обозначать буквой "X". При выполнении операций, использующих одно число (одноместные математические операции, например Sin, Cos, x2), содержимое регистра X является аргументом и оно же замещается результатом вычисления. Таким образом, остальные регистры стека остаются без изменения. Регистр, расположенный над регистром X принято обозначать буквой "Y". Если выполняется операция, для которой требуются два числа (двуместные математические операции, например +, -, xy), то содержимое регистров X и Y удаляется из стека, а в регистр X помещается результат операции. При этом высота стека уменьшается на единицу. Регистр, расположенный над регистром Y иногда обозначают буквой "Z".

Например, чтобы посчитать, сколько будет 3+7 нужно нажимать клавиши в следующей последовательности: 3, ENTER, 7, +. Результат вычисления 10. Теперь это число будет записано в самый нижний регистр стека и готово для выполнения над ним дальнейших вычислений. Чтобы вычислить 3*(2+4) необходимо последовательно нажать 3, ENTER, 2, ENTER, 4, +, * (для выполнения операции умножения "*" нужно нажать верхнюю кнопку джойстика "↑", а затем "←"). Вот как будет выглядеть экран программы во время выполнения этих вычислений, при условии того что вы начали их с пустым стеком:
Кнопка |   3   | ENTER |   2   | ENTER |   4   |   +   |   *   |
================================================================
Стек   |       |       |       |       |       |       |       |
Z      |       |       |       |       |   3   |       |       |
Y      |       |       |   3   |   3   |   2   |   3   |       |
X      |   3_  |   3   |   2_  |   2   |   4_  |   6   |   18  |
Обратите внимание, что вам не нужно нажимать ENTER после цифры 4 (хотя это не запрещено), потому что нажав + вы и так дали понять программе что закончили вводить число. После нажатия + числа 2 и 4 в сумме дали 6, при этом 3 переместилось на 1 ступеньку вниз, давая вам возможность выполнить следующую операцию - умножение в нашем примере.

Более подробно об обратной бесскобочной записи и ее развитии можно узнать здесь и тут.


Меню

Меню программы активируется нажатием на центральную кнопку джойстика. Далее, выбирая джойстиком одно из 5-ти направлений вверх, вниз, влево, вправо и центр, вы выбираете соответствующие подменю. Каждое следующее подменю будет заменять на экране предыдущее. Приведенный здесь рисунок показывает главное меню (голубого цвета с заголовком "menu") и первый уровень вложенных подменю (за исключением подменю "mode", режим). Для подменю "special" (специальные) дополнительно показаны еще три последовательно вложенных подменюшки, вызываемых нажатием на правую кнопку джойстика. Название каждого следующего подменю обозначается обычным шрифтом, а название конкретной операции – жирным шрифтом. Используя такую иерархическую систему, вы получаете доступ к более чем 200 командам.


Когда вы привыкните к структуре меню, вам больше не нужно будет нажимать центральную кнопку джойстика каждый раз. Нажимая вверх/вниз/вправо/влево, можно сразу же вызвать соответствующий пункт подменю, минуя вызов основного меню. Тогда вы получите доступ к наиболее часто используемым операциям "ENTER" и "+" в одно нажатие (эти команды не в меню, они висят на софт-клавишах), а к оставшимся основным операциям "-", "*", "/" и "+/-" – в 2 нажатия.

Некоторые функции калькулятора ("STO", "FIX" и т.п.) требуют задания дополнительных числовых аргументов. При выборе такой функции вы попадаете в двухуровневое цифровое меню, позволяющее выбрать число от 0 до 15. Когда это цифровое меню активно, числа от 0 до 9 можно задать непосредственно с помощью цифровых клавиш телефона.

Так как на некоторых телефонах может быть не очень удобно нажимать центральную кнопку джойстика, мы постарались не вешать на нее часто используемые команды. Нажав клавишу "clear" (это не команда меню, это кнопка в телефоне за которой вы закрепили данную команду в процессе установки приложения), вы вернетесь на предыдущий уровень меню.


Функции

Все описанные здесь функции доступны в меню программы. Некоторые функции более подробно описаны в разделе Дополнительные замечания.

Основные (basic)

Математические (math)

Тригонометрические (trig)

Битовые операции (bitop/ bitop2). Доступны в меню вместо пунктов math и trig в режимах HEX/OCT/BIN

Специальные функции (special)

Режимы (mode)


Дополнительные замечания


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

Калькулятор производит обработку результатов, содержащих бесконечности и неопределенности согласно стандарту IEEE754. Неправильные числа невозможно ввести непосредственно с клавиатуры, но они с легкостью возникают во время вычислений. Если в результате операции получается слишком большое число и калькулятор не может его правильно обработать, оно представляется бесконечностью и на дисплей выводится сообщение "inf" или "-inf". Если полученное в результате вычислений число по модулю меньше, чем позволяет точность программы, оно приравнивается к нулю. Чтобы иметь возможность использовать этот ноль в каких-либо дальнейших расчетах, предусмотрена возможность получения "-0" для маленьких отрицательных чисел. В случае неопределенного результата, он представляется в виде "nan" (not-a-number то есть не число).

Результаты переполнения иногда можно использовать в дальнейших вычислениях. В большинстве случаев, там где при работе с такими числами возможно получение осмысленного результата, этот результат будет получен. Например, atan(inf)=pi/2, 1/inf=0 и т.п. Там где получить осмысленный результат не удается, будет получено nan. В дополнение к этому, nan используется встроенными алгоритмами калькулятора (например, факторизация) для индикации неправильных входных параметров, или невозможности получить правильный результат.

Примеры вычислений с неправильными результатами
1/0 = inf
1+inf = inf
1*inf = inf
0/0 = nan
0*inf = nan
inf/inf = nan
inf-inf = nan
1/inf = 0
-1*0 = -0
Любые операции с nan дадут nan. Исключение – возведение nan в нулевую степень. nan^0 = 1.


Операции с комплексными числами

Калькулятор автоматически создает комплексные числа, когда вы пытаетесь извлекать квадратный корень из отрицательного числа или когда какая-либо другая операция требует представления результата в комплексном виде. Как вариант, комплексное число может быть непосредственно получено с использованием оператора "r→cplx".

Большинство операций, которые можно распространить на комплексный аргумент, могут быть выполнены с помощью калькулятора. Это простые арифметические операции (за исключением "%chg"), все операции со степенью и вычисление всех тригонометрических функций. Целочисленные операции обрабатывают действительную и мнимую часть по отдельности.

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

Если в регистре x или y находится комплексное число, вы не сможете получить доступ к подменю "coord", вместо него появляется подменю "cplx".

Комплексные числа (как и неопределенности nan) неупорядочены, т.е. нельзя сказать, что одно комплексное число больше или меньше другого. Поэтому при выполнении операций сравнения с комплексным числом (например, "x<y?" при программировании) условие сравнения никогда не будет выполняться. Аналогично, в результате операций "min" и "max" получим nan.

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

Поскольку при отображении комплексных чисел фактически в одной строке дисплея одновременно находятся два числа (2+3i), то иногда при использовании очень крупного шрифта в сочетании с большим количеством цифр, это может привести к тому, что комплексное число попросту не уместится на экране. И тогда вместо числа вы будете видеть звездочки "*****". С самими числами при этом ничего не происходит, с ними можно и дальше продолжать вычисления, но чтобы их увидеть, вам придется уменьшить размер шрифта или "разбить" комплексное число с помощью операции "cplx→r".


Операции с матрицами

Матрицу в данной программе можно создать, используя команду "matrix/create" или используя операции "matrix/stack" и "matrix/concat" для объединения в матрицу обычных чисел.

Большинство операций, которые можно распространить на матрицы, могут быть выполнены с помощью калькулятора, например это все простые арифметические операции, "1/x", "x2", а также "yx" для квадратной матрицы и целого x.

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

На дисплее матрицы отображаются в виде M:[3x4], что обозначает матрицу с 3 строками и 4 столбцами. Матрица размером 1x1 автоматически преобразуется в обычное число. Матрицы могут содержать комплексные числа и с ними возможно выполнение некоторых операций. Но в качестве элементов матрицы не могут выступать числа с единицами измерения и другие матрицы. Включив режим отображения содержимого матриц "mode/monitor/matrix", можно смотреть и редактировать содержимое нижней матрицы в стеке (*).

Программа накладывает некоторые ограничения на размер матриц. С помощью команды "new" невозможно создать матрицу с более чем 65536 строк или столбцов. Даже если вы обойдете это ограничение с помощью команд "concat" и "stack", такая матрица не будет сохраняться после закрытия программы. При записи программы можно включить режим отображения (мониторинг) содержимого матрицы и записать в программу редактирование отдельных элементов матрицы, производимых в этом "матричном мониторе". При этом редактирование элемента матрицы с номером строки или столбца больше 64 в программе сохраняться не будет.

Следует иметь ввиду, что аппаратная часть телефона, на котором установлена программа также может накладывать ограничения на размер матриц, иногда эти ограничения могут быть еще более строгими. В таком случае может возникнуть ошибка нехватки памяти "Out of memory error" при попытки создать очень большую матрицу. При возникновении такой ситуации рекомендуется перезапустить программу для предотвращения возникновения дальнейших ошибок. Также телефон может ограничивать количество данных, которые могут быть записаны в память при выходе из программы. В этом случае при повторном запуске калькулятора некоторые матрицы могут превратиться в nan.

При выполнении копирований и перемещений матриц в стеке или ячейках памяти, программа не требует дополнительной памяти, т.к. эти операции производятся не с самими матрицами, а со ссылками на них. Однако любая операция с матрицами, даже такая простая как +/- порождает новую матрицу. При этом старая матрица временно сохраняется в регистре "LAST x", что вдвое увеличивает расход памяти.


Операции с единицами измерения

Число с единицей измерения получается из обычного числа при выполнении операций "conv/unit*" или "conv/unit/" (умножение и деление на единицу измерения). Константы автоматически выводятся с размерностями в системе СИ.

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

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

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

Конкретная единица измерения может состоять из нескольких базовых единиц, возведенных в какую-либо степень (м/с2). Каждая базовая единица измерения также может быть представлена в той или иной форме (фунты, килограммы, тонны). Кроме того, составные единицы могут сдержать единицы измерения высшего порядка. Единицы высшего порядка - составные единицы измерения, возможно содержащие степени. При этом единицы высшего порядка не могут быть разложены на базовые единицы измерения без применения дополнительных коэффициентов. Например, акр – единица длины в квадрате. Но акр не может быть представлен квадратом какой-либо единицы измерения типа метров или футов. Различные единицы высшего порядка могут характеризовать один и тот же физический параметр, точно также как и базовые единицы. Например, в калькуляторе представлены 12 единиц измерения объема. В программа присутствуют практически все единицы измерения, которые могут вам потребоваться для вычислений.

В программе возможно выполнение операций над числами, имеющими разную размерность, но для этого может потребоваться предварительное согласование единиц измерения. Если в операции участвуют два аргумента, а x и y имеют разную размерность, содержимое регистра y сначала приводится к тем же базовым единицам измерения, что и содержимое регистра x (с умножением на соответствующий коэффициент) и только после этого выполняется сама операция.

Для операций, которые требуют полного совпадения единиц измерения операндов (сложение), размерности регистров x и y должны допускать полное согласование. Если сделать такое приведение размерностей невозможно, операция выполняется без учета единиц измерения, а результат операции имеет "размерность" [err]. В то же время другие операции (умножение) могут быть выполнены всегда, а согласование размерностей в них требуется только для единиц измерения, характеризующих одну и ту же физическую величину. Например, при умножении y = 1 m/s на x = 1 h в ответе получим 3600 m, так как содержимое y сначала будет переведено в 3600 m/h.

Единицы измерения отображаются на дисплее позади числа. Если единица измерения содержит более одной величины в отрицательной степени, то они объединяются знаками умножения "·" после дроби "/", при этом скобки для краткости опускаются. Например, 8.5 J/mol·K вместо J/(mol·K). Кроме того комбинации единиц измерения по возможности сокращаются до их общепринятых производных обозначений. Например, kg·m2/s2 будет "свернуто" в джоуль (J). Сложные единицы измерения могут несколько раз подвергнуться подобным трансформациям перед выводом на дисплей. За этими преобразованиями стоит алгоритм, который пытается получить наиболее компактную и при этом удобочитаемую форму представления размерности. Например, kg/s3 представляется в виде W/m2, так как квадратный метр более понятен, чем кубическая секунда. Посмотреть из каких базовых единиц составлена размерность числа можно с помощью команды special/conv/unit/describe.

Британские единицы измерения, имеющие то же написание что и американские, обозначены курсивом. Это тонна (ton), жидкая унция (fl.oz), ½ пинты (cup), пинта (pt) и галлон (gal).

Для каждой базовой единицы и единиц высшего порядка имеется ограничение, касающееся максимально возможной степени, в которую эта единица может быть возведена. Например, для единиц измерения длины максимально возможная степень равна ±8 (хотя на практике обычно достаточно 3-й степени). С другой стороны моль (единица измерения количества вещества) практически никогда не возводится в степень, поэтому для него введено ограничение порядка ±2. При превышении этого порядка на экране вместо размерности отображается [ofl]. Кроме того, никакая единица измерения не может быть явно показана на экране со степенью превышающей ±4. В этом случае также индицируется [ofl], но в дальнейших вычислениях при уменьшении показателя степени единицы измерения могут вновь начать отображаться правильно.

При возникновении ошибки или переполнения размерностей на дисплей выводится [err] или [ofl] соответственно. Если такая "единица измерения" используется в дальнейших вычислениях с числами, имеющими размерность, результат всегда будет иметь размерность [err]. С другой стороны, когда [err] или [ofl] используется в операциях с другим таким же [err] или [ofl] или с числами без размерности, результатом всегда будет безразмерное число.

Приставки системы СИ, такие как "k" для кило- или "m" для мили- доступны только для некоторых общепринятых единиц. Большинство единиц измерения с приставками СИ, как например киловатты (kW), считаются единицами измерения высшего порядка. Они не изменяются и не упрощаются в процессе вычислений точно также как, например, лошадиные силы (hp). Так 1 kW умноженный на 2 h даст 2 kW·h. В противоположность этому ватт (W) считается просто более коротким способом записи kg·m2/s3 и является сокращаемой единицей измерения. Поэтому при умножении 1 W (в регистре y) на 2 h (в регистре x) получается несколько неожиданный результат 93312000000 kg·m2/h2, т.к. предварительно s-3, входящие в состав ватт были переведены в h. Эти странности являются побочным эффектом реализации алгоритма преобразований единиц измерения. Они могут довольно часто приводить к непредвиденным результатам при работе с внесистемными единицами. Вы можете использовать команду special/conv/unit/→unit/SI для представления результата в более привычном виде 7200 J. Однако ни при каких обстоятельствах невозможно отобразить данный результат как 2 W·h, т.к. это требует одновременного присутствия двух разных единиц измерения времени – секунд и часов. К сожалению, из-за этого невозможно перевести мили/галлон в литры/км, пользуясь только операциями с единицами измерения.

Здесь приведен полный список используемых в программе единиц измерения.


Финансовые вычисления

В финансовом модуле отрицательные числа обозначают величину долга (отрицательный баланс) и внесение средств на счет, положительные числа обозначают положительный баланс и списание денег со счета.

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

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


Операции с датами

При выполнении операций с датами калькулятор работает только с григорианским календарем. Григорианский календарь был введен в католических странах в 1582 году, а в Британии и ее колониях (включая США) в 1752 году. Более ранние даты будут экстраполироваться калькулятором и не будут соответствовать реальным датам юлианского календаря, имевшего тогда употребление.

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

При выполнении преобразования из формата ггггммддчч,ммсс в количество часов, программа выполняет ряд предварительных действий. Если количество лет (гггг) равно нулю (т.е. аргумент меньше 1000000), то формат интерпретируется как ддддчч,ммсс, где дддд – количество дней. При обратном преобразовании для представления даты в формате ггггммддчч,ммсс достаточно, чтобы количество часов превысило 8784 (366 дней). Это означает, что если количество дней больше 366 и меньше 9999, то двойное преобразование числа ддддчч,ммсс в часы и обратно даст результат отличный от исходного.

Имейте ввиду, что при вводе года необходимо указывать все цифры. Если ввести только две последние цифры года, то это будет истолковано, как дата, лежащая между 1 и 99 годами в экстраполированном григорианском летоисчислении. Это не имеет значения при промежуточных расчетах (например, вычитание дат с использованием отрицательных чисел и операции DH.MS+), но может быть важно при преобразовании даты в количество часов или при сложении такого числа с какой-то конкретной датой. Опять-таки, если полученный промежуточный результат представляет собой интервал менее одного года, он будет преобразован в формат ддддчч,ммсс. Однако, этот факт не должен вызывать беспокойства, т.к. в дальнейшем программа однозначно правильно интерпретирует такие преобразования форматов. Високосные года в периоды 1-99 и 1900-1999 совпадают, что может иногда быть полезным, однако 100 год не был високосным в отличии от 2000.

При указании ненулевого года и нулевого месяца, месяц будет интерпретирован как 01 (январь). Нулевой день интерпретируется как 01 (первое число месяца). Если число секунд превышает 59, то лишние секунды прибавляются к минутам. То же самое с минутами и часами, часами и днями (если в числе более 23 часов), днями и месяцами, месяцами и годами. Например, число 2003000000 интерпретируется как 1 января 2003 года 00ч00м00с. Число 1403,5901 понимается как 14 дней, 3 часа, 59 минут и 1 секунда. Число 1,9999 - 1 час 99 минут 99 секунд, что фактически означает 2,6775 часов.

Ввиду того, что вычисления производятся с ограниченной точностью, погрешности при промежуточных вычислениях могут накапливаться и приводить к некорректному результату. Для решения большинства проблем, которые могут при этом возникнуть, в программе используется соглашение, что 99 минут и 99,9999 секунд (т.е. 0,99999999) равны 1 часу.

Соглашения по процедурам преобразования чисел в календаре были взяты из http://www.fourmilab.ch/documents/calendar/.

Время Unix
Время в формате Unix – количество секунд, прошедших с 1 января 1970 года. Используется во многих операционных системах и языках программирования.

Юлианский день
В астрономической практике часто используются понятия юлианский день и модифицированный юлианский день. Юлианский день – это количество дней, прошедших с полудня 1 января 4713 года по юлианскому календарю. Модифицированный юлианский день – количество дней, прошедших с полуночи 17 ноября 1858 года.

Следует иметь в виду, что Calc оперирует с датами и временем, сообщаемыми ему Java - машиной. Поэтому если в телефоне предусмотрен ввод часового пояса и время в телефоне отличается от времени по Гринвичу, то программа может выдавать результат, отличающийся от местного времени на несколько часов.


Константы

Значение констант было взято с http://physics.nist.gov/cuu/Constants. Константы, отмеченные знаком ≡ (в этом руководстве, а не в программе) имеют точность, ограниченную только внутренней погрешностью представления чисел в калькуляторе. Константы со знаком ≈ имеют значения, рекомендованные CODATA по состоянию на 2006 год.


Режим мониторинга

При активации режима мониторинга, команда повторения предыдущей операции в меню заменяется символом [→]. Выбор этого символа позволяет войти в экран мониторинга в верхней части дисплея. При этом один из отображаемых там элементов становится выделенным. А команды "ENTER", "menu" и "+" (внизу дисплея) заменяются командами "STO", "move" и "RCL".

Нажатие на клавишу "STO" копирует содержимое регистра x в выделенную ячейку экрана мониторинга. Нажатие "RCL" извлекает в стек содержимое выделенной ячейки экрана мониторинга. Нажатие "move" (центральная кнопка джойстика) перемещает нижний элемент стека в выделенную ячейку экрана мониторинга и завершает работу в режиме редактирования экрана мониторинга. После этого можно ввести или вычислить следующее число. После выполнения любой из вышеперечисленных операций происходит перемещение курсора к следующему элементу мониторинга. Нажатие кнопки "clear" ('C') завершает работу в режиме редактирования экрана мониторинга.


Программирование

Пункт prog я поместил в раздел меню режимы (mode), потому что в процессе разработки программы он был добавлен в самую последнюю очередь, и для него не нашлось более подходящего места. Хотя вы можете заметить, что для некоторых команд, доступных через prog, раздел режимы – не самое подходящее место.

Начиная с версии 4.00, Calc стал полностью программируемым, с поддержкой переходов и циклов. После активации режима программирования ("prog/new" или "prog/append"), все действия пользователя записываются в текущую программу, хотя внешний вид калькулятора остается таким же как и раньше, за исключением надписи "PRG" в правой верхней части экрана. Сам калькулятор не накладывает ограничений на длину программы, но все же не следует оставлять его постоянно в режиме программирования, т.к. в этом случае все ваши действия на протяжении длительного времени будут регистрироваться в программе и ее длина в конечном счете может превысить допустимый лимит памяти мобильного устройства, что вызовет ошибку переполнения "Out of memory error".

Использование команды "undo" в режиме программирования ничего не удаляет из программы, она просто добавляет в программу команду "undo" точно так же как и любая другая команда. Для удаления и редактирования команд в программе используйте режим мониторинга, описанный далее. При составлении достаточно сложной программы имеет смысл предварительно набросать на бумаге ее алгоритм.

Текст программы можно просмотреть и отредактировать в режиме мониторинга: "monitor/prog". Экран мониторинга программы становится доступен только в режиме программирования, при этом как обычно сначала нужно указать число строк, отображаемых в нем. Как и в остальных режимах мониторинга здесь имеются два режима: индикации и редактирования текста программ (режим редактирования активируется командой [→]). В режиме индикации активная строка экрана мониторинга отмечается значком ">" и каждая новая команда вставляется в эту отмеченную позицию. Вначале, при активации режима мониторинга, отмечена последняя строка в программе и все вновь вводимые команды просто добавляются друг за другом к ранее введенным. В режиме редактирования активная строка экрана мониторинга отмечается зеленым треугольником, который можно перемещать при помощи джойстика (вверх/вниз – на одну строку, влево/вправо – в начало/в конец программы). В режиме редактирования софтовые клавиши приобретают следующие функции: DEL удаляет текущую отмеченную команду, SST выполняет текущую отмеченную команду и перемещает курсор к следующей (пошаговое выполнение программы). Помните, что доступность команд, которые можно вводить в программу, зависит от текущего состояния калькулятора. Так, если вы хотите использовать команды для работы с комплексными числами, то в регистре x или y должно присутствовать комплексное число. В режиме программирования каждая введенная команда тут же выполняется калькулятором, как и в обычном режиме вычислений. Поэтому можно вводить программу и одновременно наблюдать результат ее выполнения. Как и другие режимы мониторинга, мониторинг программы можно отключить, задав число отображаемых строк равным нулю. Как бы то ни было, при выходе из режима программирования программный мониторинг автоматически деактивируется, а при повторном включении режима программирования вновь активируется с тем же количеством строк, что и в прошлый раз, даже если в это время был запущен другой режим мониторинга.

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

Для построения графика сначала необходимо указать пределы изменения значений функции по осям x и y. Если при построении графика y=f(x) программа возвращает комплексное значение, график будет разделяться на две линии разных цветов. Отсюда вытекает простой способ одновременного построения двух (не комплексных) графиков. Поместите оба значения в регистры x и y, а затем используйте команду r→cplx для получения комплексного числа. См. также дополнительные замечания о построении графиков.

Для выполнения интегрирования вначале необходимо указать пределы интегрирования и погрешность результата. По окончании операции результат помещается в стек. Если в процессе интегрирования программа-функция возвращает значение inf или nan результатом такого интегрирования будет nan. Если калькулятору не удается достигнуть заданной точности интегрирования, то в стек помещается промежуточный результат и выводится соответствующее сообщение. Алгоритм, использующийся при интегрировании, может корректно обрабатывать функции с бесконечностью в точке. В этом случае для более стабильной работы лучше, если бесконечность находится в точке x=0 и нижний предел интегрирования также 0. В большинстве случаев точность интегрирования соответствует заданной, но в зависимости от вида подынтегральной функции иногда может значительно отличаться от указанной как в ту так и в другую сторону.

Для выполнения дифференцирования вначале необходимо ввести в x точку дифференцирования. По окончании операции результат помещается в стек. Если в процессе дифференцирования программа-функция возвращает значение inf или nan результатом такого дифференцирования будет nan. Точность результата обычно составляет 13 разрядов.

Для нахождения корней уравнения необходимо ввести два значения, "охватывающих" решение, т.е. два значения x, имеющих противоположные знаки. По окончании операции результат помещается в стек. Если в процессе поиска решения программа-функция возвращает значение inf, nan или комплексное число, результатом поиска решения будет nan. В большинстве случаев точность решения составляет 19 разрядов, но во многом зависит от точности выполнения конкретных операций, используемых в процессе вычислений.

Для нахождения максимума или минимума функции необходимо ввести два таких предельных значения, чтобы программа могла однозначно определиться, что же именно она будет искать: максимум или минимум. Для этого калькулятор анализирует значение функции в середине заданного отрезка. Если это значение больше, чем значения на концах отрезка, то программа будет искать максимум. Если значение функции в средней точке отрезка меньше, чем на концах, программа будет искать минимум. Если значение в средней точке не удовлетворяет ни одному из этих условий, результатом поиска будет nan. По окончании операции результат помещается в стек. Если в процессе вычислений программа-функция возвращает значение inf, nan или комплексное число, результатом поиска будет nan. Вследствие того, что вблизи максимумов и минимумов производная функции близка к нулю, точность решения в данном случае несколько ниже, чем при поиске корней уравнения и составляет примерно 10 разрядов.

Замечание 1: Если программа имеет бесконечный цикл, например команду LBL 0 с последующим GTO 0, то выполнение такой программы можно прервать, нажав "clear" или "#" (см. Построение графиков). Однако, остановить можно только процесс выполнения самой программы. Если эта программа используется для построения графика, интегрирования, дифференцирования, решения уравнения, поиска максимума или минимума, то такой процесс остановить невозможно. В худшем случае для выхода из программы вам придется отключить телефон и потерять все изменения, сделанные в программе с момента ее последнего запуска. Если вы не уверены на счет зацикливания программы, запустите ее сначала в обычном режиме с помощью команды prog/run.

Замечание 2: Вследствие того, что калькулятор может работать с очень маленькими числами (например, 2.383e-323228497), нередко встречаются ситуации, когда при поиске максимумов/минимумов и решении уравнений при ответе, в точности равном нулю, решение занимает неопределенно долгое время. В качестве примера можно привести поиск корня функции "sgn" и min/max модуля (abs). К счастью такое зависание лечится клавишами "clear" или "#".

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

Здесь можно найти несколько примеров программ (на русском языке).


Построение графиков

Как отмечалось ранее, при построении графика калькулятор непрерывно вычисляет все новые и новые точки построения, улучшая и уточняя его. Не следует надолго оставлять программу в таком состоянии, т.к. при этом расходуется дополнительная энергия батареи. Процесс построения останавливается нажатием клавиши "Break", "clear", или "#".

Нажав на клавишу "*", вы временно прерываете построение, при этом сам график остается на дисплее. Нажатие на клавишу 0 (иногда нужно нажать дважды), перерисовывает координатные оси, сетку и цифры таким образом, что на дисплее они начинают отображаться поверх графика (особенно полезно при построении z=f(z)). Повторно нажав кнопку со звездочкой можно продолжить прерванный процесс построения.

Когда построение остановлено, можно увеличить масштаб графика, нажимая на центральную кнопку джойстика или кнопку "5". Нажимая кнопку "1", можно уменьшать масштаб. Нажимая джойстик вправо/влево/вверх/вниз или кнопки 6/4/2/8 можно сдвигать границы построения. Для того чтобы возобновить построение графика уже в новом масштабе, повторно нажмите "*". После изменения масштаба, значения xmin, xmax, ymin и ymax в стеке также изменяются соответствующим образом.


Двоичные операции

В режиме двоичных операций (HEX, OCT и BIN) калькулятор поддерживает операции с дробными числами, причем стиль их представления на дисплее, как и для десятичных чисел, зависит от выбранного числового формата (normal, FIX, SCI или ENG). Если число отображается с экспонентой, то сама экспонента всегда представлена в десятичном виде.

Калькулятор представляет отрицательные числа в дополнительном коде следующим образом: введение знака минус инвертирует все биты числа, включая бесконечное число единичных бит до запятой и бесконечное число единичных бит после запятой. Бесконечное число единичных бит перед запятой отображаются на экране как F (или 7 или 1 в восьмеричном и двоичном представлении). Бесконечное число единичных бит после запятой округляются вверх, давая бесконечное число нулей, до тех пор, пока не встретится первый нулевой бит, который будучи инвертирован, даст 1. Например, число -1 в двоичной системе можно представить в либо виде …1111110,111111… либо ...1111111,000000... Обе формы математически эквивалентны, но вариант с округлением более распространен, потому что его можно представить в более компактном виде, отбросив незначащие нули.

Таким же образом интерпретируются числа и при битовых операциях (and, or, xor и bic). Следует также помнить, что округление чисел, когда на дисплее не умещаются все разряды, может привести к тому, что отображение числа на дисплее будет отличаться от его внутреннего представления.

Примеры программ на русском языке
Комментарии переводчика





























Hosted by uCoz