[HN Gopher] Show HN: Kalk, A calculator with math syntax, comple...
       ___________________________________________________________________
        
       Show HN: Kalk, A calculator with math syntax, complex numbers, etc.
       (Rust, WASM)
        
       Author : paddim8
       Score  : 131 points
       Date   : 2021-05-30 15:07 UTC (7 hours ago)
        
 (HTM) web link (kalk.strct.net)
 (TXT) w3m dump (kalk.strct.net)
        
       | bbodi wrote:
       | If everybody adds his/her rust+wasm+calculator projects in the
       | comments, let me jump in as well with mine :)
       | https://bbodi.github.io/notecalc3/
       | 
       | Nice work btw!
        
       | simias wrote:
       | `[?]2` works but `[?]-1` doesn't, which surprised me a bit. I'
       | expect unary `-` to bind tighter, but in this context it
       | considers that it's a binary operator between `[?]` and `-1`. If
       | you put parens it works of course.
        
         | paddim8 wrote:
         | Yeah same with x^-1, I forgot about that, thanks!
        
       | [deleted]
        
       | jeroenhd wrote:
       | An interactive calculator that passes the 0.1+0.2 test, very
       | nice.
        
       | Bootvis wrote:
       | This seems off:                   >> f(x) = x^2          >>
       | f''(4)         0.9995297887
        
         | paddim8 wrote:
         | Oh yeah, derivatives of higher order being less accurate is a
         | known problem. I forgot to specify that, thanks!
        
           | Bootvis wrote:
           | Maybe best to just disable it for now, I played with e^x as
           | well and the results were off as well.
           | 
           | Ignoring these, I really like Kalk!
        
             | paddim8 wrote:
             | Thank you! Yeah, or at least give a warning.
        
               | jll29 wrote:
               | Beautiful Web GUI, beautiful source code, "cargo install
               | kalk_cli" && it works like a charm! Thanks for sharing
               | this.
        
               | paddim8 wrote:
               | Thank you so much! This is my first (and only) Rust
               | project so I'm a bit nervous about the code quality.
        
           | whiterock wrote:
           | look into Dual numbers. That way there is no accuracy loss.
           | More generally look into AD (automatic differentiation).
           | thanks me later, cheers
        
         | [deleted]
        
       | HDMI_Cable wrote:
       | This is really nice and all, but what I (and probably many
       | others) would love is an alternative to `bc`. It's so useful but
       | also so limited.
        
         | anyfoo wrote:
         | Can you elaborate? I think I know what you mean, but when I
         | clicked the link it already seemed to be a "more advanced bc"
         | to me. What are you missing, big numbers (that's what came to
         | my mind)?
        
         | kzrdude wrote:
         | what features from bc do you need? Have you seen calc (the calc
         | package in debian/ubuntu)?
        
       | fish45 wrote:
       | This is somewhat similar to my project at https://calcula.tech,
       | although the usecase is a bit different. There are a few other
       | calculators around that use Rust + WASM which is kind of
       | interesting
        
       | paddim8 wrote:
       | kalk is a calculator that has syntax highlighting, automatically
       | turns names into symbols (eg. sqrt to [?]), supports math-like
       | syntax (eg. f(x) = x(2sinx + 3) , estimation of derivatives and
       | integrals, complex numbers, and runs in the browser using
       | WebAssembly.
        
         | math-dev wrote:
         | Congrats! I write calculators myself from time to time, but
         | this sounds very impressive :) How was your experience using
         | webassembly? Any good guides that helped you with that part?
        
           | paddim8 wrote:
           | It was actually surprisingly seamless with Rust. "wasmpack"
           | pretty much did it all for me. I added some attributes (well,
           | whatever they're called in Rust) to function and struct
           | declaration to show that bindings should be generated for
           | these things, and from that wasmpack could generate
           | JavaScript bindings! Unfortunately I was slightly limited by
           | some libraries not working with WebAssembly, but I got around
           | that fairly easily.
        
             | math-dev wrote:
             | That's great to hear - thanks for the insight. And kudos
             | again on a great project, definitely not easy to get all
             | this functionality!
        
       | 0_gravitas wrote:
       | ah beautiful, i was hoping a cli-ified/updated version of the
       | already wonderful OpalCalc would come into existence!
        
       | eigenket wrote:
       | Any interest in adding more symbolic stuff? There often isn't
       | really any reason to do derivatives numerically. While I was
       | looking at the derivatives I noticed the word "quotinent" should
       | be "quotient" in the readme.
        
         | paddim8 wrote:
         | I have thought about doing derivatives and such algebraically
         | when possible. It should certainly be doable, and I already
         | have a system for moving things around to achieve these kind of
         | things. This may be a thing in the future.
        
           | eigenket wrote:
           | There are also some algorithms for trying to deal with
           | symbolic integrals but they're pretty intense compared to
           | what you have to do for derivatives (which are very easy).
        
             | paddim8 wrote:
             | Yeah that makes sense. I won't be able to do it 100% of
             | course, especially considering I so far have only learned
             | high school maths, but even if it just manages to do it in
             | some situations, that would still be fine as long as it
             | falls back to (often quite accurate) numerical integration.
             | I'll read some more about it!
        
       | artfulhippo wrote:
       | Can you support big numbers?
       | 
       | When I input 3^4^5, it outputs infinity.
        
         | paddim8 wrote:
         | The desktop program does technically have the capabilities of
         | that, but lately I've been focusing a lot more on the web
         | version, that unfortunately doesn't, so results are 64-bit at
         | the moment. I have been waiting for a proper Rust library that
         | can do this, so that it could work on the web version as well,
         | but so far, that has not happened, so I'll probably do some
         | work on properly supporting big numbers on the desktop program
         | soon.
        
         | [deleted]
        
       | kseistrup wrote:
       | I usually use the interactive Python prompt when doing
       | calculations, but kalk takes it up a notch. Well done!
       | 
       | (The pre-built Linux binary segfaults before it can show the
       | result on my ArchLinux box, but the cargo installed one works
       | like a charm.)
        
         | paddim8 wrote:
         | Thank you! I made this as a replacement for using the Python
         | prompt for calculations actually haha.
         | 
         | Hm that's strange though, it seems to work for me (also on
         | Arch). What calculation did you do?
        
           | kseistrup wrote:
           | Any calculation, even simple ones                   >> 1+2
           | fish: Job 1, './kalk-linux' terminated by signal SIGILL
           | (Illegal instruction)
        
             | kseistrup wrote:
             | (Same thing happens if the shell is bash.)
        
             | afranchuk wrote:
             | Well, that's not a segfault. It's more likely that it's
             | being compiled with an incorrect/specific architecture
             | (e.g. using AVX2 instructions). Though it really shouldn't
             | be using such instructions for basic math. It is possible
             | the instruction pointer is getting messed up too.
        
               | kseistrup wrote:
               | Ah, thanks for setting me straight. I just noticed the
               | core dump and assumed a segfault.
               | 
               | And thanks for fixing the two issues so fast.
        
             | paddim8 wrote:
             | Hmm, that's very strange, considering I'm running a very
             | similar setup (Arch and fish). I wonder if it could be an
             | issue with the library I'm using for big floats..
        
               | kseistrup wrote:
               | I agree, that's very strange, considering the similar
               | enviroments. But perhaps your CPU has a more modern
               | instruction set than mine.
        
       | dmitriid wrote:
       | For fun, try to run this: `2 + 2 * 10%` in all calculators you
       | have access to: on you phone, on your desktop, in kalk.
       | 
       | As they say, "the answer will surprise you" :)
        
         | npongratz wrote:
         | Performing the calculation with Soulver did not surprise me
         | (being what I calculated in my head ahead of time):
         | 2 + 2 x 10% = 2.2
         | 
         | At the risk of admitting my ignorance, yet more interested in
         | learning something new: should this answer (2.2) surprise me?
        
           | dmitriid wrote:
           | Wolfram Alpha and iOS also give 2.2
           | 
           | On MacOS the answer is 2.4
           | 
           | In kalk it's 2.002
           | 
           | On Windows it's 0.4 in simple calc, and 2 in programmer calc
           | (and there's no % in engineering calc)
        
             | TchoBeer wrote:
             | Android gives me 2.2
        
             | paddim8 wrote:
             | Haha damn, didn't expect that
        
             | sp1rit wrote:
             | What about the win32 calculator shipped with w7 and w10
             | ltsc?
        
         | kzrdude wrote:
         | Is there an explanation for the answer in kalk? Seems buggy
         | 
         | It seems like an expression like "1 * 10%" in kalk is computed
         | as if it means "1% * 10%" => "0.01 * 0.1" => "0.001"
        
         | a1369209993 wrote:
         | $ units       You have: 2 + 2 * 10%         Definition: 2.2
         | 
         | ITYM "the answer _may_ surprise you ", and in this case it did
         | not.
        
         | j1elo wrote:
         | The calculator that comes with MIUI 12 (Xiaomi phone) writes
         | everything as you type, like you'd expect.
         | 
         | But, the moment you type `%`, it instead replaces `10` with
         | `0.1`. So in the end the screen shows: 2+2x0.1 = 2.2
         | 
         | I guess not as surprising as you expected :-]
        
       | krick wrote:
       | This looks extremely useful, even though currently makes quite a
       | few mistakes, as noted by others. A few features that could be
       | nice:
       | 
       | 1) It handles 1 000 000 * 3 just fine, but returns 3000000. So it
       | would be nice if it would format output as 3 000 000 as well for
       | readability. At least as an optional setting (even though I have
       | no idea why someone wouldn't want that).
       | 
       | 2) Some way of referencing last result. Often you need to perform
       | operations step by step, when, say, estimating something. So
       | either 10 \n + 20 \n * 3 ..., or just referencing last output
       | like some special variable. I though I could do it more verbosely
       | by just x = 10; x = x + 20 ..., but that gives "Variable
       | references itself."
       | 
       | 3) Not sure about this one, since this is not something natural
       | at all, and I don't know what to propose to make it natural (at
       | least without proposing map/filter/reduce and some sort of multi-
       | line inputs). Neither is it a real problem, but it's just
       | something I probably use a calculator most often: simply adding
       | up a dozen of numbers, copied from somewhere as a column. So
       | currently I must first open vim, convert it to and expression bc
       | will handle ( 15 + 21 + 32 ...), and then paste in to bc. With
       | kalk it would be similar. Would be great if one could skip that
       | step since this (I assume) would be a common use-case. But, yeah,
       | I don't have an actual suggestion on how to naturally address
       | that.
        
         | paddim8 wrote:
         | These are some great suggestions! I should absolutely make it
         | add spaces, can't believe I didn't think of that.
         | 
         | Also, it actually does have a way to reference the last result,
         | I forgot to document it. It's a variable called "ans"!
         | 
         | The last thing, yeah, that would be neat. I'll think about
         | it...
        
       | gojofika wrote:
       | You might check the link to get unlimited Google Voice Number
       | https://bit.ly/34tc4BI (100% trusted & quality service
       | guaranteed)
        
       | sp1rit wrote:
       | Would love to have TeX syntax support for this one, as I'm so
       | used to typing it.
        
       ___________________________________________________________________
       (page generated 2021-05-30 23:00 UTC)