Post Reply 
Sharp PC-G850VS
02-23-2021, 04:03 AM (This post was last modified: 07-08-2022 02:52 PM by robve.)
Post: #143
RE: Sharp PC-G850VS
(02-22-2021 10:29 PM)rprosperi Wrote:  This is quite surprising, but thanks for insights on the additional C function support for the built-in BASIC functions. I recall he told me there was a certain entire class of functions that were not provided, which I took to mean something like 'all the trig Fns', 'all the Stats Fns', etc. but perhaps he merely meant that basic functions such as you've provided in your 2nd post, which can be easily assembled from available core functions, were not provided? Also, ROM space limits was a factor (it always is!) so best to spend ROM space on the much more difficult transcendental functions.

Very good points!

I should add that most students learning C typically do not need any of the advanced math functions. They spend a lot of time on other things, like getting to grips with the concept of C pointers to build data structures Smile (or Sad depending what PL you like best).

It might be useful to reproduce most of the math.h functions for the PC-G850(V)(S), even if it is just an exercise. This is a professional calculator forum after all Wink

The C math functions are carefully crafted to prevent catastrophic cancellation, roundoff, and overflow issues. These issues are not for beginners. Entire books have been written on this subject.

Here is my attempt at reproducing the math.h functions and constants for the PC-G850(V)(S). EDIT: added new functions atan2, fmod, erf, erfc, tgamma, and lgamma with everything tested and verified:

/* math.h for the PC-G850(V)(S) - Dr. Robert van Engelen */
/* Written in compact form to save space */
/* WARNING: <,<=,>,>= on floats have a bug on some G850's, instead of x<y use x-y<0 */
/* Note: erf and erfc precision is at least 1.2e-7 (erfcc) */
/* Note: lgamma and tgamma precision is at least 2e-10 (Lanczos) */
/* License: BSD-3 open source */

#define M_E 2.718281828
#define M_LOG2E 1.366512921
#define M_LOG10E .4342944819
#define M_LN2 .693147181
#define M_LN10 2.302585093
#define M_PI 3.141592654
#define M_PI_2 1.570796327
#define M_PI_4 .7853981634
#define M_1_PI .3183098862
#define M_2_PI .6366197724
#define M_2_SQRTPI 1.128379167
#define M_SQRT2 1.414213562
#define M_SQRT1_2 .7071067812

double fabs(double x){return x<0?-x:x;}
double copysign(double x,double y){return y<0?-fabs(x):fabs(x);}
double log2(double x){return log(x)/M_LN2;}
double exp2(double x){return exp(M_LN2*x);}
double cbrt(double x){return pow(x,1./3);}
double floor(double x){return fabs(x)-1e9<0?x<0?(long)(x-.9999999999):(long)x:x;}
double ceil(double x){return -floor(-x);}
double trunc(double x){return fabs(x)-1e9<0?(long)x:x;}
double round(double x){return floor(x+.5);}
double modf(double x,double*y){return x-(*y=fabs(x)-1e9<0?x-(long)x:0);}
double fdim(double x,double y){return x-y>0?x-y:0;}
double fmax(double x,double y){return x-y>0?x:y;}
double fmin(double x,double y){return x-y<0?x:y;}
double hypot(double x,double y){double a=fabs(x),b=fabs(y);return a?b?a-b<0?b*sqrt(1+x/y*x/y):a*sqrt(1+y/x*y/x):a:b;}
double atan2(double y,double x){return x>0?atan(y/x):y?asin(y<0?-1:1)-atan(x/y):acos(-(x<0));}
double fmod(double x,double y){return x-y*trunc(x/y);}

double erfc(double x){double p=1/(1+fabs(x)/2),q=-.18628806+p*(.27886807+p*(-1.13520398+p*(1.4885187+p*(-.82215223+p*.17087277))));p*=exp(-x*x-1.26551223+p*(1.00002368+p*(.37409196+p*(.09678418+p*q))));return x<0?2-p: p;}
double erf(double x){return 1-erfc(x);}
double lgamma(double x){return log((1+76.18009173/(x+1)-86.50532033/(x+2)+24.01409824/(x+3)-1.231739572/(x+4)+1.208650974e-3/(x+5)-5.395239385e-6/(x+6))*2.506628275/x)+(x+.5)*log(x+5.5)-x-5.5;}
double tgamma(double x){return exp(lgamma(x));}

Note that hypot avoids catastrophic overflow by rearranging terms. Macros are used only if the argument(s) is/are guaranteed to be evaluated just once in the macro body. This avoids the common problem with calls like fmax(x++,y++) that fail as a macro. Otherwise, I tried to be as efficient as possible. Unlike the BASIC INT() function posted earlier, the floor(), ceil(), trunc(), round(), and modf() all work on unlimited doubles by using the fact that a long integer can hold up to 9 digits and G850(V)(S) doubles have 10 digit mantissas. This means that values >=1e9 have no fractional part. I used this observation to trick the code to check for |x|<1e9 which means the value has a fraction and can use a long cast in that case to obtain the integer part, otherwise just return the value unchanged.

If you spot an issue or an opportunity for further optimization then let us know!

- Rob

EDIT: replaced #defines with functions and added warning.

"I count on old friends" -- HP 71B,Prime|Ti VOY200,Nspire CXII CAS|Casio fx-CG50...|Sharp PC-G850,E500,2500,1500,14xx,13xx,12xx...
Visit this user's website Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
Sharp PC-G850VS - Zaphod - 04-16-2018, 08:49 AM
RE: Sharp PC-G850VS - grsbanks - 04-16-2018, 08:58 AM
RE: Sharp PC-G850VS - Zaphod - 04-16-2018, 10:26 AM
RE: Sharp PC-G850VS - andylithia - 04-16-2018, 12:26 PM
RE: Sharp PC-G850VS - mfleming - 04-16-2018, 02:16 PM
RE: Sharp PC-G850VS - Zaphod - 04-16-2018, 09:31 AM
RE: Sharp PC-G850VS - Helix - 04-16-2018, 02:33 PM
RE: Sharp PC-G850VS - mfleming - 04-16-2018, 06:39 PM
RE: Sharp PC-G850VS - Zaphod - 04-16-2018, 07:02 PM
RE: Sharp PC-G850VS - mfleming - 04-16-2018, 10:13 PM
RE: Sharp PC-G850VS - Zaphod - 04-23-2018, 09:57 PM
RE: Sharp PC-G850VS - mfleming - 04-24-2018, 03:37 AM
RE: Sharp PC-G850VS - Zaphod - 04-24-2018, 07:33 AM
RE: Sharp PC-G850VS - mfleming - 04-24-2018, 07:35 PM
RE: Sharp PC-G850VS - Zaphod - 04-24-2018, 07:54 PM
RE: Sharp PC-G850VS - Zaphod - 04-30-2018, 10:44 AM
RE: Sharp PC-G850VS - mfleming - 04-30-2018, 06:08 PM
RE: Sharp PC-G850VS - mfleming - 05-05-2018, 10:22 PM
RE: Sharp PC-G850VS - Zaphod - 05-02-2018, 10:48 AM
RE: Sharp PC-G850VS - mfleming - 05-02-2018, 03:46 PM
RE: Sharp PC-G850VS - Zaphod - 05-02-2018, 08:50 PM
RE: Sharp PC-G850VS - Helix - 05-02-2018, 10:44 PM
RE: Sharp PC-G850VS - Zaphod - 05-03-2018, 07:29 AM
RE: Sharp PC-G850VS - rprosperi - 05-03-2018, 12:56 PM
RE: Sharp PC-G850VS - Zaphod - 05-03-2018, 02:17 PM
RE: Sharp PC-G850VS - grsbanks - 05-03-2018, 02:19 PM
RE: Sharp PC-G850VS - Zaphod - 05-03-2018, 02:43 PM
RE: Sharp PC-G850VS - Zaphod - 05-03-2018, 04:14 PM
RE: Sharp PC-G850VS - Zaphod - 05-03-2018, 04:15 PM
RE: Sharp PC-G850VS - Zaphod - 05-03-2018, 04:17 PM
RE: Sharp PC-G850VS - Helix - 05-03-2018, 10:44 PM
RE: Sharp PC-G850VS - mfleming - 05-03-2018, 11:17 PM
RE: Sharp PC-G850VS - Helix - 05-04-2018, 12:49 AM
RE: Sharp PC-G850VS - rprosperi - 05-04-2018, 03:04 AM
RE: Sharp PC-G850VS - Zaphod - 05-04-2018, 05:31 AM
RE: Sharp PC-G850VS - Zaphod - 05-04-2018, 07:53 AM
RE: Sharp PC-G850VS - twdeckard - 05-06-2018, 08:18 PM
RE: Sharp PC-G850VS - mfleming - 05-06-2018, 08:49 PM
RE: Sharp PC-G850VS - jwhsu - 07-11-2018, 11:01 PM
RE: Sharp PC-G850VS - rprosperi - 07-11-2018, 11:17 PM
RE: Sharp PC-G850VS - foroplus - 07-12-2018, 09:17 AM
RE: Sharp PC-G850VS - toml_12953 - 08-19-2018, 12:53 AM
RE: Sharp PC-G850VS - smp - 08-19-2018, 01:28 AM
RE: Sharp PC-G850VS - toml_12953 - 08-20-2018, 03:23 AM
RE: Sharp PC-G850VS - Eddie W. Shore - 07-12-2018, 02:06 PM
RE: Sharp PC-G850VS - Helix - 07-12-2018, 02:44 PM
RE: Sharp PC-G850VS - jwhsu - 07-12-2018, 04:23 PM
RE: Sharp PC-G850VS - robve - 09-09-2020, 09:53 PM
RE: Sharp PC-G850VS - alainza - 08-05-2022, 08:41 PM
RE: Sharp PC-G850VS - mfleming - 07-12-2018, 01:51 AM
RE: Sharp PC-G850VS - jwhsu - 07-18-2018, 02:08 PM
RE: Sharp PC-G850VS - rprosperi - 07-19-2018, 01:35 AM
RE: Sharp PC-G850VS - jwhsu - 07-19-2018, 03:13 AM
RE: Sharp PC-G850VS - rprosperi - 07-19-2018, 03:24 AM
RE: Sharp PC-G850VS - SlideRule - 07-19-2018, 04:07 PM
RE: Sharp PC-G850VS - Zaphod - 07-20-2018, 08:36 AM
RE: Sharp PC-G850VS - Jlouis - 07-25-2018, 10:29 PM
RE: Sharp PC-G850VS - rprosperi - 07-25-2018, 10:36 PM
RE: Sharp PC-G850VS - Helix - 07-26-2018, 10:40 AM
RE: Sharp PC-G850VS - mfleming - 08-01-2018, 12:49 AM
RE: Sharp PC-G850VS - jwhsu - 08-01-2018, 09:42 PM
RE: Sharp PC-G850VS - jwhsu - 08-01-2018, 09:56 PM
RE: Sharp PC-G850VS - mfleming - 08-03-2018, 05:58 PM
RE: Sharp PC-G850VS - Zaphod - 08-05-2018, 08:33 PM
RE: Sharp PC-G850VS - jwhsu - 08-06-2018, 04:10 PM
RE: Sharp PC-G850VS - Jlouis - 08-06-2018, 11:55 PM
RE: Sharp PC-G850VS - Zaphod - 08-07-2018, 06:43 PM
RE: Sharp PC-G850VS - smp - 08-11-2018, 04:20 PM
RE: Sharp PC-G850VS - smp - 08-17-2018, 08:27 PM
RE: Sharp PC-G850VS - smp - 08-18-2018, 08:58 PM
RE: Sharp PC-G850VS - jwhsu - 08-20-2018, 12:21 PM
RE: Sharp PC-G850VS - rprosperi - 08-20-2018, 12:38 PM
RE: Sharp PC-G850VS - jwhsu - 08-20-2018, 12:52 PM
RE: Sharp PC-G850VS - rprosperi - 08-20-2018, 02:55 PM
RE: Sharp PC-G850VS - smp - 08-20-2018, 08:37 PM
RE: Sharp PC-G850VS - megarat - 08-24-2018, 10:12 PM
RE: Sharp PC-G850VS - toml_12953 - 09-05-2018, 12:56 PM
RE: Sharp PC-G850VS - xerxes - 09-06-2018, 09:47 AM
Sharp PC-G850VS STAT Mode - toml_12953 - 09-13-2018, 03:57 AM
RE: Sharp PC-G850VS - mfleming - 09-13-2018, 02:33 PM
RE: Sharp PC-G850VS - Zaphod - 09-13-2018, 04:34 PM
RE: Sharp PC-G850VS - rprosperi - 09-13-2018, 05:12 PM
RE: Sharp PC-G850VS - mfleming - 09-13-2018, 07:23 PM
RE: Sharp PC-G850VS - Zaphod - 09-13-2018, 08:36 PM
RE: Sharp PC-G850VS - brickviking - 09-13-2018, 09:59 PM
RE: Sharp PC-G850VS - Zaphod - 09-13-2018, 10:03 PM
RE: Sharp PC-G850VS - foroplus - 09-15-2018, 08:42 AM
RE: Sharp PC-G850VS - rprosperi - 09-15-2018, 12:59 PM
RE: Sharp PC-G850VS - foroplus - 09-15-2018, 01:10 PM
RE: Sharp PC-G850VS - jwhsu - 09-18-2018, 01:07 AM
RE: Sharp PC-G850VS - foroplus - 09-18-2018, 09:55 AM
RE: Sharp PC-G850VS - toml_12953 - 09-14-2018, 12:09 AM
RE: Sharp PC-G850VS - Zaphod - 09-14-2018, 10:44 AM
RE: Sharp PC-G850VS - jwhsu - 09-14-2018, 04:22 PM
RE: Sharp PC-G850VS - Zaphod - 09-14-2018, 05:26 PM
RE: Sharp PC-G850VS - toml_12953 - 09-21-2018, 05:18 PM
RE: Sharp PC-G850VS - jwhsu - 09-22-2018, 02:00 AM
RE: Sharp PC-G850VS - toml_12953 - 09-22-2018, 02:03 AM
RE: Sharp PC-G850VS - Zaphod - 09-13-2018, 08:47 PM
RE: Sharp PC-G850VS - Zaphod - 09-13-2018, 09:14 PM
RE: Sharp PC-G850VS - jwhsu - 09-18-2018, 10:58 PM
RE: Sharp PC-G850VS - rprosperi - 09-18-2018, 11:35 PM
RE: Sharp PC-G850VS - jwhsu - 09-18-2018, 11:42 PM
RE: Sharp PC-G850VS - mfleming - 09-19-2018, 01:02 AM
RE: Sharp PC-G850VS - jwhsu - 09-19-2018, 02:14 AM
RE: Sharp PC-G850VS - Zaphod - 09-21-2018, 05:34 PM
RE: Sharp PC-G850VS - Zaphod - 09-22-2018, 06:48 PM
RE: Sharp PC-G850VS - megarat - 10-01-2018, 02:25 AM
RE: Sharp PC-G850VS - Zaphod - 10-01-2018, 12:19 PM
RE: Sharp PC-G850VS - xerxes - 10-01-2018, 12:52 PM
RE: Sharp PC-G850VS - Jlouis - 10-24-2018, 07:40 PM
RE: Sharp PC-G850VS - koikoi - 08-21-2019, 11:38 PM
RE: Sharp PC-G850VS - Jlouis - 09-01-2019, 11:16 AM
RE: Sharp PC-G850VS - koikoi - 09-06-2019, 12:58 PM
RE: Sharp PC-G850VS - david16965 - 12-23-2019, 12:52 PM
RE: Sharp PC-G850VS - david16965 - 12-23-2019, 04:21 PM
RE: Sharp PC-G850VS - Luca Puntin - 03-07-2020, 03:38 AM
RE: Sharp PC-G850VS - mfleming - 03-07-2020, 03:58 PM
RE: Sharp PC-G850VS - Luca Puntin - 03-08-2020, 09:13 AM
RE: Sharp PC-G850VS - mfleming - 03-09-2020, 02:07 AM
PC G850 PIC programming - Luca Puntin - 03-09-2020, 01:59 PM
RE: Sharp PC-G850VS - thenozone - 03-19-2020, 12:24 AM
RE: Sharp PC-G850VS - Luca Puntin - 03-19-2020, 09:31 PM
RE: Sharp PC-G850VS - robve - 10-03-2020, 03:20 PM
RE: Sharp PC-G850VS - robve - 11-06-2020, 08:27 PM
RE: Sharp PC-G850VS - grsbanks - 12-09-2020, 07:03 PM
RE: Sharp PC-G850VS - grsbanks - 12-15-2020, 04:05 PM
RE: Sharp PC-G850VS - twdeckard - 12-16-2020, 02:03 AM
RE: Sharp PC-G850VS - grsbanks - 12-16-2020, 07:17 AM
RE: Sharp PC-G850VS - tommi60 - 12-16-2020, 08:23 AM
RE: Sharp PC-G850VS - toml_12953 - 12-17-2020, 04:32 AM
RE: Sharp PC-G850VS - Dave Britten - 12-17-2020, 06:23 PM
RE: Sharp PC-G850VS - twdeckard - 12-17-2020, 10:17 PM
RE: Sharp PC-G850VS - robve - 12-18-2020, 07:48 PM
RE: Sharp PC-G850VS - groskwik - 06-11-2021, 07:35 AM
RE: Sharp PC-G850VS - mfleming - 12-19-2020, 07:52 PM
RE: Sharp PC-G850VS - robve - 12-27-2020, 06:57 PM
RE: Sharp PC-G850VS - mfleming - 01-25-2021, 04:09 PM
RE: Sharp PC-G850VS - Eddie W. Shore - 02-22-2021, 12:26 AM
RE: Sharp PC-G850VS - robve - 02-22-2021, 02:17 AM
RE: Sharp PC-G850VS - robve - 02-22-2021, 09:28 PM
RE: Sharp PC-G850VS - rprosperi - 02-22-2021, 12:38 AM
RE: Sharp PC-G850VS - robve - 02-22-2021, 02:53 AM
RE: Sharp PC-G850VS - rprosperi - 02-22-2021, 10:29 PM
RE: Sharp PC-G850VS - robve - 02-23-2021 04:03 AM
RE: Sharp PC-G850VS - silven - 06-03-2021, 05:30 PM
RE: Sharp PC-G850VS - robve - 06-06-2021, 07:45 PM
RE: Sharp PC-G850VS - silven - 06-07-2021, 05:00 PM
RE: Sharp PC-G850VS - robve - 06-07-2021, 09:30 PM
RE: Sharp PC-G850VS - silven - 06-16-2021, 11:26 PM
RE: Sharp PC-G850VS - Helix - 06-19-2021, 03:40 PM
RE: Sharp PC-G850VS - robve - 07-12-2021, 07:11 PM
RE: Sharp PC-G850VS - rprosperi - 06-08-2021, 12:37 PM
RE: Sharp PC-G850VS - robve - 06-08-2021, 05:18 PM
RE: Sharp PC-G850VS - rprosperi - 06-09-2021, 02:18 AM
RE: Sharp PC-G850VS - chrisherman - 02-01-2022, 01:37 PM
RE: Sharp PC-G850VS - robve - 02-02-2022, 02:00 AM
RE: Sharp PC-G850VS - Dave Britten - 02-02-2022, 03:01 AM
RE: Sharp PC-G850VS - chrisherman - 02-02-2022, 10:59 PM
RE: Sharp PC-G850VS - rprosperi - 02-02-2022, 01:22 PM
RE: Sharp PC-G850VS - OS1 - 04-11-2022, 08:32 PM
RE: Sharp PC-G850VS - robve - 04-12-2022, 02:07 AM
RE: Sharp PC-G850VS - OS1 - 04-12-2022, 07:34 PM
RE: Sharp PC-G850VS - robve - 04-12-2022, 08:09 PM
RE: Sharp PC-G850VS - toml_12953 - 04-14-2022, 04:47 AM
RE: Sharp PC-G850VS - rprosperi - 04-14-2022, 12:36 PM
RE: Sharp PC-G850VS - toml_12953 - 04-14-2022, 05:57 PM
RE: Sharp PC-G850VS - toml_12953 - 06-29-2022, 08:30 AM
RE: Sharp PC-G850VS - robve - 07-06-2022, 08:07 PM
RE: Sharp PC-G850VS - EdS2 - 07-07-2022, 07:05 AM
RE: Sharp PC-G850VS - robve - 07-07-2022, 02:56 PM
RE: Sharp PC-G850VS - toml_12953 - 07-07-2022, 05:12 PM
RE: Sharp PC-G850VS - robve - 07-14-2022, 11:29 PM
RE: Sharp PC-G850VS - robve - 11-11-2022, 01:18 AM
RE: Sharp PC-G850VS - fleseriutiberiu - 01-25-2023, 03:18 PM
RE: Sharp PC-G850VS - robve - 02-14-2023, 02:42 AM
RE: Sharp PC-G850VS - Bushcat - 03-02-2023, 09:50 AM
RE: Sharp PC-G850VS - mfny - 05-03-2023, 04:19 PM
RE: Sharp PC-G850VS - Helix - 05-06-2023, 01:05 AM
RE: Sharp PC-G850VS - mfny - 05-08-2023, 01:05 PM
RE: Sharp PC-G850VS - Bushcat - 05-10-2023, 01:08 PM
RE: Sharp PC-G850VS - Helix - 05-09-2023, 05:35 PM
RE: Sharp PC-G850VS - toml_12953 - 05-10-2023, 03:30 AM
RE: Sharp PC-G850VS - Helix - 05-10-2023, 01:01 PM
RE: Sharp PC-G850VS - dmh - 01-23-2024, 05:16 AM



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