NO

Author Topic: Fork of QD (2.3.17) dll  (Read 9163 times)

Offline jack

  • Member
  • *
  • Posts: 62
Re: Fork of QD (2.3.17) dll
« Reply #15 on: August 29, 2017, 06:56:27 PM »
hello TimoVJL
I tested c_dd_dll_ms and here's what I found
c_dd_add   ok
c_dd_sub   ok
c_dd_mul   ok
c_dd_div   ok
c_dd_sqr   ok
c_dd_sqrt   ok
c_dd_write   ok
c_dd_read   ok
the trig, log and exp functions give wrong results, c_dd_atan gives right result only for arg=1, c_dd_tan is missing.
sorry for the bad report, I just thought that you might like to have some feedback. :)

Offline jack

  • Member
  • *
  • Posts: 62
Re: Fork of QD (2.3.17) dll
« Reply #16 on: August 29, 2017, 08:49:35 PM »
hello TimoVJL
I didn't think about this earlier, but this type of arithmetic is sensitive to the FPU setting, remember that in the original code there were two functions to set the FPU flags, I bet that's where the problem is, or if you can coerce the compiler to use sse2 instructions then you should be ok.
« Last Edit: August 29, 2017, 08:54:19 PM by jack »

Offline jj2007

  • Member
  • *
  • Posts: 536
Re: Fork of QD (2.3.17) dll
« Reply #17 on: August 30, 2017, 05:26:48 PM »
this type of arithmetic is sensitive to the FPU setting, remember that in the original code there were two functions to set the FPU flags, I bet that's where the problem is, or if you can coerce the compiler to use sse2 instructions then you should be ok.

But don't forget LDMXCSR ;)

Offline jack

  • Member
  • *
  • Posts: 62
Re: Fork of QD (2.3.17) dll
« Reply #18 on: September 05, 2017, 01:47:22 PM »
hello TimoVJL
you are getting close, however there's a bug in dd_to_digits, if dd_variable.x[0] = 0.1 and dd_variable.x[1] = -5.551115123125983e-018 then you get an error and crash.
Quote
(dd_to_digits): can't compute exponent.
the trigs seem to be ok, but only made a very simple test.
« Last Edit: September 05, 2017, 01:50:02 PM by jack »

Offline jack

  • Member
  • *
  • Posts: 62
Re: Fork of QD (2.3.17) dll
« Reply #19 on: September 05, 2017, 04:41:07 PM »
there's a problem with dd_cos, if dd_x = 1/n , n=11, 12, 13 ... then dd_cos fails, for dd_x=1/11 the result is
Quote
                                   dd_x.x[0]                               dd_x[1]
cos(1/11)            0.9958706137005629          0.9958706137005629
it should be something like
Quote
cos(1/11)            0.9958706137005629         -4.772639498746044e-017
[edit] dd_log is not working
« Last Edit: September 05, 2017, 05:04:44 PM by jack »

Offline jack

  • Member
  • *
  • Posts: 62
Re: Fork of QD (2.3.17) dll
« Reply #20 on: September 05, 2017, 07:57:36 PM »
I did a loop from -70 to 70 and used mpfr for verification, for log/exp the loop was from 1 to 70
sin, cos, tan, atan, log and exp are ok, not sure about the hyperbolic functions.

Offline jack

  • Member
  • *
  • Posts: 62
Re: Fork of QD (2.3.17) dll
« Reply #21 on: September 05, 2017, 08:10:05 PM »
dd_atanh(dd_tanh(x)) from 1 to 19 ok, above 19 dd_atanh says "Argument out of domain."

Offline jack

  • Member
  • *
  • Posts: 62
Re: Fork of QD (2.3.17) dll
« Reply #22 on: September 05, 2017, 09:13:35 PM »
we really need a good test suite to check the functions in the supported range, the hyperbolic functions are trickier to check.

Offline jack

  • Member
  • *
  • Posts: 62
Re: Fork of QD (2.3.17) dll
« Reply #23 on: September 06, 2017, 12:11:46 AM »
I made a small test and the trigs -not including hyperbolic- , log and exp seem to be ok
I have been doing my testing in freebasic because I am more familiar with it than C.