This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: configure and asinl function problem


Joost Kraaijeveld wrote:

The problem is that configure seems to think that there *is* support "long double math": the test succeeds and HAVE_ASINL (and all other
double math) is defined. So both compile and link appear to be succesful
as far as configure is concerned.


Before choosing a solution, I want to understand why the problem is
occuring.

According to the cited mail however, that is because configure checks
the availibility of "long double math" with a short piece of code,
supplying *it's own* function definition (and not using e.g. math.h) and
linking with *some* libraries. Because I do not understand how configure
is doing that (I have looked into the macros but failed to understand
them), I do not know what exactly the code is configure is using or to
which libraries configure links the executable. I think btw that it is
using libstdc++:
$ objdump.exe -t libstdc++.a | grep asinl
[  2](sec  1)(fl 0x00)(ty  20)(scl   2) (nx 0) 0x00000020 _asinl



If the application has a configure which simply checks for some instances of extra precision, without actually checking the presence of each function in the headers and libraries to be used, that seems broken. There are plenty of expert models for such configure scripts, such as the one used in the libstdc++ build itself. Maybe we should look into how libstdc++ decides it can support asinl() on Cygwin. Did you check whether it is actually using long double, or some mixture of double and long double? I'll try to remember to look next time I build libstdc++.

In case the application is serious about wanting more accuracy than asin(), I'll point out that the usual macro-like definitions using code like atan2l(x,sqrtl(1-x*x) will lose up to 9 bits of precision, compared with atan2l(x,sqrtl((1+x)*(1-x))). The former version is accurate (and faster) only on architecture with infinite precision fused multiply-add.


-- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]