On 2018-06-11 14:04, Stephan Houben wrote: > 2018-06-11 19:33 GMT+02:00 Michael Selik <m...@selik.org > <mailto:m...@selik.org>>: > > Whoops, it turns out Euler's formula does work! I expected imprecision, > but at least one test matched. > > x = 42 > cos(x) + 1j * sin(x) == e ** (1j * x) > > > I think you will find it holds for any x (except inf, -inf and nan). > The boat is less leaky than you think; IEEE floating-point arithmetic goes > out of its way to produce exact answers whenever possible. > (To great consternation of hardware designers who felt that > requiring 1.0*x == x was too expensive.)
In fact, 1.0*x == x is almost all that this test exercises. If I'm looking in the right place, this is C the implementation of a ** b, omitting in a few special cases: vabs = hypot(a.real,a.imag); len = pow(vabs,b.real); at = atan2(a.imag, a.real); phase = at*b.real; if (b.imag != 0.0) { len /= exp(at*b.imag); phase += b.imag*log(vabs); } r.real = len*cos(phase); r.imag = len*sin(phase); This means that (e ** ...) is essentially implemented in terms of the formula above. Indeed, in the special case of e ** (1j * x), we have a.real = e, a.imag = 0.0, b.real = 0.0, and b.imag = 1.0, so concretely the code simplifies to this: vabs = e len = 1.0 at = 0.0 phase = 0.0 if (b.imag != 0.0) { len = 1.0; phase = x; // requires log(e) == 1.0 and x * 1.0 == x } r.real = cos(phase); // requires 1.0 * x == x r.imag = sin(phase); Thus, it shouldn't be too surprising that the formula holds :) Clément. _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/