| Hi all, as a hobby I've been developing a scientific calculator with some neat features. Available on: * web (mobile or desktop): https://alexbarry.github.io/AlexCalc/ * Android: https://play.google.com/store/apps/details?id=net.alexbarry.... Some neat features: * LaTeX equation display (I hated counting brackets on my old graphing calculators back in college, now I wouldn't have to if I wasn't ~10 years late in making this) * variables (you can store variables with `1 + 2 -> x`, then access them `x^2 - 3`) * unit operations, and unit conversions, e.g. `10 km / 2 minutes to mph`, or more fancily: `sqrt((3 kOhm + j*100 mH * 1000 kHz)/(1 S + j * 1 nF * 1000 kHz))` * complex numbers (specifically focused on making it easy to enter complex numbers in polar form, in degrees, e.g. `5 angle 90`, but press the "degree" button) * can enter input either via button presses or typing, so copying and pasting inputs works well The core calculator parsing, evaluating, and LaTeX generation is in C++, with CMake build files. Using emscripten[0], this compiles to webassembly for the web version, and I can also compile this for Android and use JNI. The library converting my generated LaTeX code to graphics is "MathJax"[1], a really nice browser library that I loved working with both in the web version and in the Android WebView. I'm happy to receive any feedback at all. One big weakness currently are the syntax error messages, I haven't yet implemented a way to point to a particular position where an error occurs. If there is some nice parsing library that I could use instead, I might consider switching to that if it isn't too difficult. Currently the parsing uses a bunch of (fairly simple) regular expressions (e.g. check for number, check for optional unit, check for binary operator, add to stack, collapse stack. This ends up with a tree of nodes, and then this tree can either be evaluated or converted to LaTeX.) I'm also interested in hearing any strategies for a decent cross platform UI. I didn't want to just include the HTML UI in a WebView on Android, since I figured it wouldn't be a great user experience. Originally I thought it would be small enough that I could just write two separate copies... but it turns out that there is a lot more UI code than I expected (automatically insert multiplication symbols on button presses, input history, storing "recently used units" when the button is pressed, etc...) [0]: https://emscripten.org/ [1]: https://www.mathjax.org/ |
Right now 0.1+0.2-0.3 results = 2.775557562 \cdot 10^{-17}, which depending on your viewpoint is either expected or unexpected. Also (0.1+0.2)-0.3 is simplified to 0.1+0.2-0.3 for display, but results a different value = 5.551115123 \cdot 10^{-17}