Has anyone any idea where I can get a double precision maths library which will work with the Keil C51 compiler.
Hello Dave Have never used the forum before, but I have been driven here by the same need... my project required greater precision than 'float' & I have discovered the hard way that the Keil tools (otherwise very good) ignore the 'double' declaration. You can get a double precision maths library that Keil claim will do the job... it's called GoFast from microdigital (see http://www.smxinfo.com) but it costs around $5,000. I cannot justify the cost as all I need is the four basic functions (+ - / and *). I have had a quick look at the problem & it seems this could be done as C functions (using a union to create the data type & writing functions to do the maths) - if this is all you need, do you want to collaborate on writing & testing these? BR Paul
Hi Paul I see what you mean about the price - how on earth do they justify that! We have decided that we can just about do the job by using 64 bit integers providing we put some code in place to stop the the numbers overflowing so we will not need to do anything more, but thanks for the offer! I wish you well with your task and if I can help in any way don't hesitate to contact me. Dave
"I see what you mean about the price - how on earth do they justify that!" Have you tried adding-up how long you've spent on this so far? Give this to your accounts department, and ask what cost it represents - be sure to get the full cost, with full overhead weighting, etc. And don't forget the costs of testing, maintenance, documentation, etc, etc,... They may even want to factor-in the time that you haven't been spending on other work...
It's interesting to note that ANSI requires only a minimum 10 digits of precision for a double and 6 for a float. In fact, that is the only difference in requirements between the two. Long double has the same minimum requirements as double. I don't know whether there is an exemption for freestanding implementations from supporting 10 digit doubles or if this is an example of 'ANSI compliance' being slightly redefined. Either way, I don't think the ANSI minimum requirements for double are in line with most people's expectations.
Hello Ian Yes - this one had me perplexed. 10 decades would be enough for me, but since the IEEE format calls for 8 bytes with a 53-bit mantissa (including the assumed leading 1) I don't know why ANSI C only calls for 10 decades. Since the maths will be coded in binary, I will used all the mantissa bits, which will give me over 15 decades of respolution. best regards - Paul
"Yes - this one had me perplexed. 10 decades would be enough for me, but since the IEEE format calls for 8 bytes with a 53-bit mantissa (including the assumed leading 1) I don't know why ANSI C only calls for 10 decades." I don't think ANSI requires IEEE754 to be used. The explanation for the seemingly 'easy' requirements is most likely to avoid making old implementations non-conforming. ANSI have always seem to have adopted a policy of formalising existing popular implementations rather than pushing the boundaries forward.
View all questions in Keil forum