Comment by dan-robertson

Comment by dan-robertson 2 months ago

3 replies

The instruction you refer to is for evaluating polynomials, not solving them, so I’m a bit confused by your claims. It is pretty common to evaluate polynomials as part of solving them (if you’re aiming for numeric solutions), but solving tends to also require:

- some kind of root finding (note that methods like Newton–Raphson don’t work when zeros have multiplicity)

- dividing polynomials by (X - a) after finding one root to find the next root

PopePompus 2 months ago

The POLY instruction was the CISCiest of the VAX instructions. One machine instruction could evaluate a polynomial. I think it could even handle the situation where fetching one of the coefficients caused a page fault. If you knew the VAX instruction set well, writing code in VAX assembly was almost as easy as using a higher level language.

  • dan-robertson 2 months ago

    Was the instruction really much more complex than eg some byte-string comparison instruction? For string comparison you’re doing a simpler operation at each step, and the accumulation is much simpler, but maybe you have short-circuiting too. POLY corresponds to the following C, I think:

      float poly(int d, float x, float *c) {
        c+=d;
        float y = *c;
        while(d--)
          y = *c-- + y * x;
        return y;
      }
    
    I also don’t see why you consider this to be the CISCiest instruction from an architecture that includes a substring-search instruction, a vaguely printf-like instruction with its own mini instruction set for the pattern strings it takes, and an instruction to do polynomial division in the ring of polynomials over F_2 (ok this is just CRC)