WP34s: Gamma function for x very close to zero

10042015, 12:52 PM
(This post was last modified: 10042015 01:49 PM by Dieter.)
Post: #1




WP34s: Gamma function for x very close to zero
I just found what I think is a glitch in the WP34s Gamma function: arguments very close to zero can cause the calculator to hang and/or throw an error.
Code: 1E10 Γ OK I assume this is because somewhere in the code (using 39 digit precision) 1+some_small_value rounds to 1. But there is a simple fix: If x<1E–20 simply evaluate \(\Gamma(x) \approx \frac{1}{x}\gamma_{EM}\). The absolute value of the relative error here is < 1E–40, so the result is as least as accurate as the internal 39 digit routine. Dieter 

10052015, 02:25 AM
Post: #2




RE: WP34s: Gamma function for x very close to zero
Yeah, there was a 1x in there causing problems.
I've fixed the real versions of gamma and lngamma. I've not touched the complex flavours at this stage. Pauli 

10052015, 07:32 PM
(This post was last modified: 10052015 07:38 PM by Dieter.)
Post: #3




RE: WP34s: Gamma function for x very close to zero
(10052015 02:25 AM)Paul Dale Wrote: Yeah, there was a 1x in there causing problems. Thank you very much. I see you set the threshold to 1E–24, both in Gamma and ln Gamma. But there seems to be another problem with the regularized Gamma functions Γp and Γq for large arguments. Try e.g. 1E12 ENTER Γp or Γq. This should yield roughly 0,5 while it actually returns –22,6673 (!) resp. 1 – this = 23,6673. I discovered this problem while posting in the Prime forum (cf. "Inverse Poisson" thread) where the errors in Γq caused problems in my Poisson quantile program. Dieter 

10062015, 03:07 AM
Post: #4




RE: WP34s: Gamma function for x very close to zero
(10052015 07:32 PM)Dieter Wrote: I see you set the threshold to 1E–24, both in Gamma and ln Gamma. Reusing a constant I already had rather than introducing a new one. Quote:But there seems to be another problem with the regularized Gamma functions Γp and Γq for large arguments. Try e.g. 1E12 ENTER Γp or Γq. This should yield roughly 0,5 while it actually returns –22,6673 (!) resp. 1 – this = 23,6673. I'm about ready to give on on these functions and the incomplete beta  Pauli 

10062015, 06:51 AM
Post: #5




RE: WP34s: Gamma function for x very close to zero  
10072015, 06:34 PM
Post: #6




RE: WP34s: Gamma function for x very close to zero
(10062015 03:07 AM)Paul Dale Wrote: I'm about ready to give on on these functions and the incomplete beta I am sorry to say this, but it's getting even worse: Code: 1,5 Γ 2,3632718... Strange: Γ seems to work, while lnΓ crashes. The lnΓ(–2,5) case (should throw an error) caused the display of my hardware 34s to slowly fade away until it got inresponsive. Pressing the reset button in the battery compartment was required to bring it back to life (→ "Restored"). The batteries were not new, but the low battery symbol did not show up. The emulator (wp34sgui.exe) simply hangs and needs an Alt+F4 to close and restart. Dieter 

10072015, 11:21 PM
Post: #7




RE: WP34s: Gamma function for x very close to zero
(10072015 06:34 PM)Dieter Wrote: A few weeks ago I modified (my local copy of) the source code for the Γ and LnΓ in order to save a few bytes combining both in a single function. An unexpected side effect of this change is that now it does not show this issue (Γp and Γq still fail for large arguments, though). Perhaps Paul might like to take a look to this code. If so I'll PM it. Regards. César  Information must flow. 

10082015, 11:19 AM
Post: #8




RE: WP34s: Gamma function for x very close to zero
Weird, I can reproduce on my 34S (v3225) but not on the console emulator which is producing the correct results for these two cases.
No time to track down the issue at present... Pauli 

10082015, 11:21 AM
Post: #9




RE: WP34s: Gamma function for x very close to zero  
10082015, 01:06 PM
(This post was last modified: 10082015 01:07 PM by fhub.)
Post: #10




RE: WP34s: Gamma function for x very close to zero  
10082015, 07:27 PM
Post: #11




RE: WP34s: Gamma function for x very close to zero
(10082015 11:19 AM)Paul Dale Wrote: Weird, I can reproduce on my 34S (v3225) but not on the console emulator which is producing the correct results for these two cases. (10082015 01:06 PM)fhub Wrote: Not with the latest emulator version SVN 3813, here everything works as expected: FTR: My findings refer to version 3.3 3742 with printer support, both for the emulator and the physical device. Dieter 

10112015, 01:32 PM
Post: #12




RE: WP34s: Gamma function for x very close to zero
Pauli dis some work on the unified code. It did pay off! We have gained at least one library page (even two in the standard build without xtal or ir). The total savings is some 350 bytes. Changes like this allow for more GUI enhancements. I love it.
As usual, some testing is required! Marcus von Cube Wehrheim, Germany http://www.mvcsys.de http://wp34s.sf.net http://mvcsys.de/doc/basiccompare.html 

10112015, 07:43 PM
(This post was last modified: 10112015 07:47 PM by Dieter.)
Post: #13




RE: WP34s: Gamma function for x very close to zero
(10112015 01:32 PM)Marcus von Cube Wrote: Pauli dis some work on the unified code. It did pay off! We have gained at least one library page (even two in the standard build without xtal or ir). The total savings is some 350 bytes. Great! (10112015 01:32 PM)Marcus von Cube Wrote: Changes like this allow for more GUI enhancements. I love it. There are other functions that require some updates, for instance the Poisson and Binomial CDF, PDF and Inverses. I have some (experimental) code for the quantile functions that seems to work fine (provided the Gamma functions and the PDFs work correctly), but this will require more memory than the current versions. But it will also return correct fractional results. ;) I would also appreciate if the one or other key function could be switched from XROM to Ccode, for instance the Normal quantile. In the days of the original HP35 a design goal was to return results for all functions within a second. This goal is not met by the Q^{–1} function, at least not for x or 1–x < 0,04. Which again is caused by the way the Gamma function is coded... #) Dieter 

« Next Oldest  Next Newest »

User(s) browsing this thread: 1 Guest(s)