Partly for S&G, I once build a two quadrant multiplier -- an OTA. I added a sampled servo loop, so that, for 10us out of every 10ms, the +in is switched to zero, the output is switched to an error amplifier, and the error amplifier is switched to a sample-and-hold on the -in. So in the 10us, it settles to zero offset, then resumes normal operation at some new -in offset, where it can drift around some more, then get reset again.
To get 100% uninterrupted service from such a circuit, you need exactly double everything: two OTAs, so one handles the signal while the other gets autozeroed. PITA. Useless.
The alternative is a circuit which does not suffer from offset voltage and thermal drift: a proper LM13700 or whatever.
On the upside, the performance was astonishing. I could literally bring one transistor (in the diff pair) up to soldering temperature -- the offset was something ridiculous like 1V -- but it was still multiplying just fine, understanding that since absolute temperature was different, the gain was proportionally different as well. I also tried it with germanium transistors, which also worked just fine, until the heated transistor got so hot it literally became a three-way short (so much leakage between B/C/E that it looks more like a crappy resistor than any kind of transistor).
It also compensated for drift in the current mirror transistors (which were doing level shifts, not a key part of the circuit behavior).
Tim