Thinking for some time about refactoring Quantum Game (<a href="https://github.com/stared/quantum-game" rel="nofollow">https://github.com/stared/quantum-game</a>), including its complex tensor operation part (plus some "boring but important" like jspm.io -> webpack, actually using Vue or React vs the no-framework mess, etc). If anyone interested in collaboration, I am happy to talk!
I like how you moved to Complex16Array for reduced memory overhead and improving CPU cache performance. I'd probably take a close look at your get method's "return new Complex16(...)" call and see if those object instantiations are consuming a lot of CPU time and memory churn on their own.<p>We use quite a bit of complex numbers in Javascript under the hood within CircuitLab for doing frequency-domain circuit analysis of electronic circuits like filters and amplifiers. In that mode, a circuit simulator is essentially solving a system of complex-valued equations using a sparse matrix solver that accepts complex numbers, so the complex arithmetic routines are some of the potential performance hot spots. You'd want to unroll a lot of the intermediate manipulation without creating a lot of new objects in the middle! I've written a short complex numbers tutorial here: <a href="https://www.circuitlab.com/textbook/complex-numbers/" rel="nofollow">https://www.circuitlab.com/textbook/complex-numbers/</a>
Cool!<p>I once wrote a much hackier version of complex arithmetic in JavaScript [0]. It was to support a visualization of the complex derivative [1].<p>I found it useful to think of a complex number as a point in R^2 that operates under some different rules. I used Mathematica's `ComplexExpand` to translate from traditional notation for complex numbers [2].<p>[0]: <a href="https://github.com/chnn/multivariable-derivative-viz/blob/master/app/utils/complex-numbers.js" rel="nofollow">https://github.com/chnn/multivariable-derivative-viz/blob/ma...</a><p>[1]: <a href="http://people.reed.edu/~ormsbyk/projectproject/assets/posts/multivariable-derivative/multivariable-derivative-viz/" rel="nofollow">http://people.reed.edu/~ormsbyk/projectproject/assets/posts/...</a><p>[2]: <a href="https://reference.wolfram.com/language/ref/ComplexExpand.html" rel="nofollow">https://reference.wolfram.com/language/ref/ComplexExpand.htm...</a>
Not much to say about the complex implementation itself; seems pretty good, and it's as 'bare-metal' as you can get in browser javascript. It's not a great abstraction, and very little error checking.<p>However, I <i>really</i> like this literate programming style. You've got live editing, and legible output, in the form of little TeX blocks. It's a really nice way to define, describe, and teach little libraries like this. Well done.