ProgCalc
38 Digit Swift Programmable
Free · Designed for iPad. Not verified for macOS.
**ProgCalc Overview**
ProgCalc is a high-precision (38-digit) programmable calculator with true-decimal arithmetic, offering a Swift programming language interface for creating complex algorithms. It supports both scalar and non-scalar data types and operations. Non-scalar data types include complex numbers, quaternions, n-dimensional vectors, arrays, lists, and hierarchical tuples.
The app uses a tailored subset of the standard Swift language, optimized for numerical applications. It includes a comprehensive 38-digit scalar math library featuring well-known transcendental functions (trigonometric, hyperbolic, logarithmic, and exponential) as well as specialized functions such as arithmetic-geometric mean, arbitrary-precision rounding, modulo operations, binomial coefficients (log and normal), factorial functions (log and normal), ceiling and floor functions (toward -∞ and 0), and more.
A detailed app documentation is included, accessible via the [2nd][8] key. It provides a comprehensive guide to all calculator features, a language reference with examples and grammar, and additional resources.
**User Interface Modes**
ProgCalc offers three interactive modes, detailed in the app documentation:
- Standard infix notation (infiX, default)
- Fully editable infix notation (infiXE)
- Reverse Polish Notation (RPN)
You can switch between modes from the device’s home screen by using a pressure gesture on the app icon. On iPad devices, dedicated mode-switch keys provide a more convenient option.
**Additional Notes**
- ProgCalc is ad-free and will remain so.
- The app does not collect any information.
- The app does not rely on any third-party software.
more Enhancement and Bug Fix Release 2.2
The primary goal of this release is to complete the macOS challenge initiated with the 2.1 release: the introduction of the new interactive SWIFT mode. This release modified the runtime of the Interactive Swift mode, ensuring that it exclusively runs 'off' the main thread. This change includes MathLib calls, and any user functions invoked, as well as potentially long-running user expressions involving chained property operators. This release signifies the first ‘proper’ macOS app that never becomes unresponsive.
For fine details of this release, refer to the in-app documentation beginning with “Release 2.2,” which includes bookmarks to related sections.
2.2 4 Feb
Touchup Release 2.15 (from Release 2.10)
This release marks the completion of the initial journey of the ProgCalc app. It is now fully functional on iPhones, iPads, and Macs, with features extended to each device’s capabilities.
For fine details of this release, refer to the in-app documentation beginning with “Release 2.15,” which includes bookmarks to related sections.
2.15 20 Jan
Enhancement and Bug Fix Release 2.1
This release introduces a new interactive mode called SWIFT, in addition to RPN, infiX, and infiXE, for Mac computers running ProgCalc.app as a “Designed for iPad” app. Release 2.1 supports a full macOS keyboard and provides direct command-line access to the ProgCalc Swift language. Now, you can write however complex multiple Swift statements on a single command line using a full macOS keyboard without any mouse intervention. Line editing features are provided to assist your entry. Simply press [return] to submit your entry. If there are any errors, the same editing features are available, while the app positions the cursor precisely at the location where the built-in Swift compiler encountered an issue. Additionally, you can re-edit your commit at any time until you initiate a new one.
The app document, starting with “Release 2.1,” provides detailed information about the new SWIFT mode, including bookmarks to related sections. However, that’s not all. There are also numerous small enhancements and bug fixes included in this release.
2.1 9 Jan
Enhancement and Bug Fix Release 2.01
The iPad and macOS versions of ProgCalc keypad visual bugs have been fixed. The bug began appearing after the v2.0 update, when the infix mode control bar row was added. When using the app in rpn mode, switching from the background to the foreground, switching back to ProgCalc from another app, or triggering the iOS day/night color shift, the infix-mode only control bar row became visible, but with touch malfunctions. All visual modes (portrait, landscape, and split view modes) were affected. This issue has been resolved.
ProgCalc MathLib rounding functions have been fixed after another long-undetected bug. Refer to document Section 11.10.2 for more details.
This release also introduces an enhancement for rpn mode by adding a complementary control bar row for iPad and macOS keypads. Refer to Figure 10.2 in Section 10.3, or simply launch the app and switch to rpn mode.
The document has been slightly modified to include Figure 10.2 and Section 11.10.2 has been amended.
2.01 08/12/2025
Enhancement and Bug Fix Release 2.0
ProgCalc Math Library Property Operators have undergone significant improvements. Notably, previously unimplemented features, such as the absence of stride operand support in most cases, have been incorporated. Additionally, more accurate implementations have been opted in.
For a comprehensive overview of all the changes introduced in this release, refer to the built-in app documentation, specifically in Section 11, titled “Release Notes,” subsection Section 11.10, “Release 2.0.”
2.0 02/12/2025
Bug Fix Release 1.91
Several bugs related to property operator entry in infiX and infiXE interactive modes have been resolved. To test these fixes, try using the .map, .gmap, .gmapr, .bmap, .reduce, .zip, and .contains property operators in the interactive infix modes. These operators now work correctly with non-scalar types and non-scalar expression results, including operator chaining (e.g., .bmap(agm).map(sin).gmap(fixedround, 32)), without displaying confusing transient error messages. Additionally, some macOS shortcut keys have been updated or added.
For detailed information about all the changes in this release, refer to the built-in app documentation, specifically in Section 11.9, “Release Notes.” All subsections have been updated.
Late Bugs Detected:
In infiX / infiXE interactive modes, memory registers ($m0 through $m11) are treated as scalar variables by default. If you store a tuple in a memory register and attempt to use chained property operators like '.map(.elem_access_op)' interactively (e.g., $m4.map(.y)), it will fail with:
"syntax error, unexpected 'vector element access operator"
However, the same operation works when compiled and run in a program:
$m4.map(.y) // works in compiled programs
This happens because memory registers are implicitly declared as scalars, and type-casting is not available interactively.
var $m4: scalar // type-cast is not available interactively.
Workaround: Now assume that you've stored a tuple value in the $m4 memory register. Define a tuple-type global variable that mirrors $m4, and avoid purging it.
// type-cast is required. Refreshes value from $m4 on each execution.
var m4: tuple = $m4 as tuple
// purge(m4)
Now, the same operation will work interactively -- use [2nd][swap|VARS] view to enter 'm4':
m4.map(.y) // works — 'm4' has explicit tuple type
Note that a tuple resulting from a 'vexpr' works interactively just as it does in a compiled program. For example, you can interactively create an array object, convert it to a tuple, and extract the .y field from each element to build a list of y-values:
[ your_array ].map ( cis ) .map ( .y )
In general, any interactive expression requiring an explicit type cast will fail. For instance, starting with a 'vexpr' tuple and attempting '.map(.y)' will result in a syntax error in interactive mode, even though it works when compiled as type information would be available.
1.91 05/11/2025
Enhancement and Bug Fix Release 1.9
This release introduces dynamic font sizes to accommodate various size configurations, including macOS’s dynamic window size changes. It also resolves several rare bugs and improves upon the bug reported in the previous release, version 1.8, which was labeled as “Known Bugs.”
Detailed information about all changes in this release is available in the built-in app documentation, specifically in Section 11.9, “Release Notes.”
Late Bugs Detected:
Global variables and functions defined but not purged by the program are visible on the [2nd][swap|VARS] view (Section 2.5.3), in user tabs ([user.in.circle], [f(x)], and [abc]) after the program completes. On iOS platforms, you can delete these elements in these views by swiping left. When ProgCalc is running on Mac as an iOS application, this deletion is not working. The workaround is to write a small Swift program and manually purge these stray elements.
Example: Suppose you have stray program elements like ‘var t:tuple’, ‘var q:quat’, and ‘func someFunc(a: scalar, tt:tuple) -> array’. To purge them, write this small Swift program:
var v, p; // re-defined as scalars; valid (Section 4.2.4).
func someFunc() { } // someFunc() is also completely redefined; also valid.
purge(v, p, someFunc)
This workaround will remove the stray global variables and functions.
1.9 30/10/2025
** Revision Release 1.8 **
1. To improve user experience, the macOS shortcut keys have been redesigned for better intuitiveness and predictability. The range of shortcut keys has also been expanded. The new shortcut assignments align with RPNscfi.app, enabling seamless use of both applications with greater familiarity.
2. Integer factorization sample programs have been updated.
3. Internal improvements.
** Documentation Changes **
Please refer to Section 11.8, “Release Notes,” in the app documentation.
1.8 16/10/2025
Document Updates:
Section 10 has been revised.
* Figure 10.1: The image of an iPhone has been replaced with an image of an iPad.
* The shortcut key assignment for [gcd|zeta-1] has been changed from “Z” to “g”.
* Section 10.1: References to iPhone text have been removed.
* The entry for [gcd|zeta-1] in Table has been updated.
Section 11.7: References to iPhone text have been removed.
1.71 10/10/2025
Enhancement Release 1.7
This release introduces one new feature: ProgCalc is now compatible with macOS as an iPad or iPhone app. For details of this update, refer to Section 10, “Keyboard Shortcuts for ProgCalc on Mac,” in the app documentation.
Document Changes:
1. Section 10, “Release Notes,” has been renumbered to Section 11.
2. A new Section 10, titled “Keyboard Shortcuts for ProgCalc on Mac,” has been added.
3. Release Notes updated.
1.7 07/10/2025
Enhancement Release 1.6
For a comprehensive overview of the changes introduced in this release, please refer to the App document Section 10.6 titled “Release 1.6” Release Notes.
The App Document is included with the application. To access the App Document, please follow these steps:
1. Launch the application and press the [2nd][8] key to bring up the (pdf) document.
2. Press and hold the application icon and select “document” from the drop-down menu.
1.6 30/09/2025
Version 1.5 document correction release:
Document "Section 6 Language Grammar" revised.
Calculator MathLib evaluation samples source codes revised (samples/ml_xxx.swift).
1.51 16/01/2022
Enhancement Release.
App document is included with the App. Do either of these to access App document:
+ launch App and press [2nd][8] key to bring up (pdf) document, or
+ pressure-press App icon and select "document" from the drop-down menu.
Please refer to App document Section 10 Release Notes for changes covered in this release.
1.5 14/01/2022
Minor user interface touch ups.
1.42 05/10/2021
interactive infiX/infiXE modes various bug fixes and dark/light mode color changes.
1.41 01/10/2021
App document is included with the app. Use:
+ launch app and press [2nd][8] key to bring up (pdf) document, or
+ pressure-press App icon and select "document" from the drop-down menu.
Release 1.4 changes are covered in App document Section 10 Release Notes.
1.4 20/09/2021
App document is included with the app. Use:
+ launch app and press [2nd][8] key to bring up (pdf) document, or
+ pressure-press App icon and select "document" from the drop-down menu.
Release 1.3 changes are covered in App document Section 10 Release Notes.
1.3 01/07/2021
Enhancements:
+ None.
BUG fixes:
+ Built-in users manual was not properly updated in apps Documents folder (a curtesy file sharing feature).
Document Changes:
+ Sections 2.4 and 2.6 clarification changes.
Note: iPad display screen is still at preliminary stage.
1.26 06/01/2019
Enhancements:
+ Built-in pdf browser full-screen status bar cover view implemented.
BUG fixes:
+ None.
Document Changes:
+ Section 2.4 editorial change.
Note: iPad display screen is still at preliminary stage.
1.25 17/12/2018
Enhancements:
+ ProgCalc built-in pdf browser "Open Document" menu item added. This feature will allow you open pdf documents on your device's local disk as well as on your iCloud disk.
BUG fixes:
+ Device rotation scrollable-display visual defects are fixed (especially impacting iPhoneX+ and iPad models).
+ iPhone device rotation keypad visual defects are fixed (impacting all iPhone models).
+ Calculator state restoration premature termination corrected. Premature termination occurred when there was no user program.
Document Changes:
+ Section 9 modified: PDF Document Browser is further described.
Note: iPad display screen is still at preliminary stage.
1.22 27/11/2018
Enhancements:
+ decimal number parsing improved.
+ compilation type-parsing error message improved.
Document Changes:
+ minor clarifications and corrections.
1.21 19/11/2018
New Features:
+ array/list/tuple indexing operators added:
+ .first, .last
+ both provide readable and writeable access.
+ array/list/tuple property operators added:
+ func isEmpty -> scalar (.true/.false)
+ func insert(expr|vexpr, index)
+ func append(expr|vexpr)
+ func remove(index)
+ func removeFirst()
+ func removeLast()
+ math library hypot(x, y) binary function added.
Changes:
+ Prog Editor: E-mail now sends attachments (previous version was sending content in e-mail body).
Document Changes (impacted sections):
+ 4.1.1 Type Declaration
+ 4.1.2 Non-Scalar Type Element Access & Indexing
+ 4.1.3 Non-Scalar Type Property Operators
+ 6.2 Operator Precedence and Associativity
+ 6.3.9 Vector (Non-Scalar) Expressions
+ 6.4 Compiled Grammar Rules
+ 7.2 list2 Operand Type Math Library Functions
+ 7.3 Math Library Binary Functions (new)
BUG fixes:
+ none
1.2 15/11/2018
New Features:
+ print() command is redesigned to support expressions as arguments. v1.0 supported only variables as arguments (refer to document sections "3.4.1 Logs" and "6.3.10 Debugging" for details).
Document changes:
+ Sections "3.4.1 Logs" and "6.3.10 Debugging" are changed.
BUG fixes:
+ Program Editor did not set "modified" status when you insert text from Math Library Browser.
1.1 10/11/2018
Enhancement and Bug Fix Release 2.2
The primary goal of this release is to complete the macOS challenge initiated with the 2.1 release: the introduction of the new interactive SWIFT mode. This release modified the runtime of the Interactive Swift mode, ensuring that it exclusively runs 'off' the main thread. This change includes MathLib calls, and any user functions invoked, as well as potentially long-running user expressions involving chained property operators. This release signifies the first ‘proper’ macOS app that never becomes unresponsive.
For fine details of this release, refer to the in-app documentation beginning with “Release 2.2,” which includes bookmarks to related sections.
more Version 2.2 4 Feb
Data Not Collected The developer does not collect any data from this app.