D - D complex (again)
- John Fletcher (36/36) Feb 07 2002 Some aspects of complex now work O.K. with 0.18.
- Roberto Mariottini (6/18) Feb 07 2002 This recalls me a question: is it possible for a D program to crash?
- Pavel Minayev (5/8) Feb 07 2002 In theory, it looks like it tries to handle all exceptions it can, both
- Walter (5/41) Feb 07 2002 Ok, I'll work on that.
- Walter (7/23) Feb 11 2002 Ok, I've got this fixed.
- John Fletcher (4/19) Feb 12 2002 Thanks. Presumably that will be in the next release.
Some aspects of complex now work O.K. with 0.18. Problems (1) Multiplying an imaginary by itself causes a stack fault at compile time: imaginary imag = 2.5i; printf ("test of imag*imag = %Lf\n",imag*imag); DMD caused a stack fault in module DMD.EXE at 015f:0040fed2. Registers: EAX=0073df84 CS=015f EIP=0040fed2 EFLGS=00010216 EBX=0073df84 SS=0167 ESP=00622000 EBP=00731a40 ECX=00a253e0 DS=0167 ESI=00d64ef4 FS=39d7 EDX=00480fec ES=0167 EDI=00737eb8 GS=39de Bytes at CS:EIP: 57 e8 f0 02 00 00 8b 4b 1c 89 43 18 e8 e5 02 00 Stack dump: 00d64ef4 00731a40 0073df84 00a25404 0040924a 00731a40 0073df84 0040b61e 0040b625 00737eb8 00d64ef4 00d64ef4 004091c7 00731a40 00d64ef4 00409e6b (2) I need to be able to extract the imaginary part of a complex variable as a real number of type extended. This is possible as follows: complex z = 1. + 2.i; extended imag_part = z.im/1i; That involves an unnecessary division sum. As I explained before, it makes sense to me for z.im to return an extended number, rather than the imaginary number, but is it possible to add another property e.g. z.rim which would return it as extended? Other properties which would be useful would be the modulus sqrt(z.re^2 + z.rim^2) and the argument atan2(z.rim,z.re) (I forget the order of the arguments, what is needed is z.rim/z.re protected against infinities). These should preferably be worked out to full precision. Thanks John
Feb 07 2002
"John Fletcher" <J.P.Fletcher aston.ac.uk> wrote in message news:3C626C84.39229BEF aston.ac.uk...[...] DMD caused a stack fault in module DMD.EXE at 015f:0040fed2. Registers: EAX=0073df84 CS=015f EIP=0040fed2 EFLGS=00010216 EBX=0073df84 SS=0167 ESP=00622000 EBP=00731a40 ECX=00a253e0 DS=0167 ESI=00d64ef4 FS=39d7 EDX=00480fec ES=0167 EDI=00737eb8 GS=39de Bytes at CS:EIP: 57 e8 f0 02 00 00 8b 4b 1c 89 43 18 e8 e5 02 00 Stack dump: 00d64ef4 00731a40 0073df84 00a25404 0040924a 00731a40 0073df84 0040b61e 0040b625 00737eb8 00d64ef4 00d64ef4 004091c7 00731a40 00d64ef4 00409e6bThis recalls me a question: is it possible for a D program to crash? Anyway, how about adding a crash/unhandled exception reporting utility with the language? Ciao
Feb 07 2002
"Roberto Mariottini" <rmariottini lycosmail.com> wrote in message news:a3tsue$q3t$1 digitaldaemon.com...This recalls me a question: is it possible for a D program to crash? Anyway, how about adding a crash/unhandled exception reporting utility with the language?In theory, it looks like it tries to handle all exceptions it can, both internal and system. At least the access violation is handled correctly, it just exits quietly with a tiny error message =)
Feb 07 2002
"John Fletcher" <J.P.Fletcher aston.ac.uk> wrote in message news:3C626C84.39229BEF aston.ac.uk...Some aspects of complex now work O.K. with 0.18. Problems (1) Multiplying an imaginary by itself causes a stack fault at compile time: imaginary imag = 2.5i; printf ("test of imag*imag = %Lf\n",imag*imag);Ok, I'll work on that.DMD caused a stack fault in module DMD.EXE at 015f:0040fed2. Registers: EAX=0073df84 CS=015f EIP=0040fed2 EFLGS=00010216 EBX=0073df84 SS=0167 ESP=00622000 EBP=00731a40 ECX=00a253e0 DS=0167 ESI=00d64ef4 FS=39d7 EDX=00480fec ES=0167 EDI=00737eb8 GS=39de Bytes at CS:EIP: 57 e8 f0 02 00 00 8b 4b 1c 89 43 18 e8 e5 02 00 Stack dump: 00d64ef4 00731a40 0073df84 00a25404 0040924a 00731a40 0073df84 0040b61e 0040b625 00737eb8 00d64ef4 00d64ef4 004091c7 00731a40 00d64ef4 00409e6b (2) I need to be able to extract the imaginary part of a complex variable as a real number of type extended. This is possible as follows: complex z = 1. + 2.i; extended imag_part = z.im/1i; That involves an unnecessary division sum. As I explained before, it makes sense to me for z.im to return an extended number, rather than the imaginary number, but is it possible to add another property e.g. z.rim which would return it as extended?I think a better way is just optimize out the /1i.Other properties which would be useful would be the modulus sqrt(z.re^2 + z.rim^2) and the argument atan2(z.rim,z.re) (I forget the order of the arguments, what is needed is z.rim/z.re protected against infinities). These should preferably be worked out to full precision. Thanks JohnJust call the C ones for now.
Feb 07 2002
"John Fletcher" <J.P.Fletcher aston.ac.uk> wrote in message news:3C626C84.39229BEF aston.ac.uk...Some aspects of complex now work O.K. with 0.18. Problems (1) Multiplying an imaginary by itself causes a stack fault at compile time: imaginary imag = 2.5i; printf ("test of imag*imag = %Lf\n",imag*imag);Ok, I've got this fixed.(2) I need to be able to extract the imaginary part of a complex variable as a real number of type extended. This is possible as follows: complex z = 1. + 2.i; extended imag_part = z.im/1i; That involves an unnecessary division sum. As I explained before, it makes sense to me for z.im to return an extended number, rather than the imaginary number, but is it possible to add another property e.g. z.rim which would return it as extended?I changed things around so that z.im will return the imaginary part as a real number. To get the imaginary part as an imaginary number: (imaginary)z This should cover the necessary cases.
Feb 11 2002
Walter wrote:"John Fletcher" <J.P.Fletcher aston.ac.uk> wrote in message news:3C626C84.39229BEF aston.ac.uk...Thanks. I had no problem multiplying real and imaginary.Some aspects of complex now work O.K. with 0.18. Problems (1) Multiplying an imaginary by itself causes a stack fault at compile time: imaginary imag = 2.5i; printf ("test of imag*imag = %Lf\n",imag*imag);Ok, I've got this fixed.I changed things around so that z.im will return the imaginary part as a real number. To get the imaginary part as an imaginary number: (imaginary)z This should cover the necessary cases.Thanks. Presumably that will be in the next release. John
Feb 12 2002