source: CIVL/src/include/civl/math.cvl@ c630a8d

1.23 2.0 main test-branch
Last change on this file since c630a8d was 6157530, checked in by Si Li <sili@…>, 10 years ago

update pow() function in math.cvl using $pow

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@3047 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 28.9 KB
Line 
1/* CIVL model of math.h. Part of functions have optional assumption
2 * models which are controlled by two macros:
3 * 1. MATH_ELABORATE_ASSUMPTIONS: replacing a complicated assumption
4 * expression which includes implications with a "if..else" statement.
5 * This option reduces the complicity of the assumption expression but
6 * increase the number of branches.
7 * 2. MATH_NO_ASSUMPTIONS: for some cases that the return value is not
8 * important, it's no need to add any assumption.
9 */
10
11#ifndef __CIVL_MATH__
12#define __CIVL_MATH__
13#include <civlc.cvh>
14#include <math.h>
15
16double acos(double x) {
17 $abstract double ACOS(double X);
18 double result;
19
20 $assert(-1 <= x && x <=1, "Argument x should be in interval[-1, 1]");
21 result = ACOS(x);
22#ifdef MATH_ELABORATE_ASSUMPTIONS
23 if(x == 1)
24 return 0;
25 else {
26 $assume(result > 0);
27 return result;
28 }
29#elif defined(MATH_NO_ASSUMPTIONS)
30 return result;
31#else
32 $assume(((x == 1 => result == 0) && (x != 1 => result > 0)));
33 return result;
34#endif
35}
36
37float acosf(float x) {
38 $abstract float ACOSF(float X);
39 double result;
40
41 $assert(-1 <= x && x <=1, "Argument x should be in interval[-1, 1]");
42 result = ACOSF(x);
43#ifdef MATH_ELABORATE_ASSUMPTIONS
44 if(x == 1)
45 return 0;
46 else {
47 $assume(result > 0);
48 return result;
49 }
50#elif defined(MATH_NO_ASSUMPTIONS)
51 return result;
52#else
53 $assume(((x == 1 => result == 0) && (x != 1 => result > 0)));
54 return result;
55#endif
56}
57
58long double acosl(long double x) {
59 $abstract long double ACOSL(long double X);
60 double result;
61
62 $assert(-1 <= x && x <=1, "Argument x should be in interval[-1, 1]");
63 result = ACOSL(x);
64#ifdef MATH_ELABORATE_ASSUMPTIONS
65 if(x == 1)
66 return 0;
67 else {
68 $assume(result > 0);
69 return result;
70 }
71#elif defined(MATH_NO_ASSUMPTIONS)
72 return result;
73#else
74 $assume(((x == 1 => result == 0) && (x != 1 => result > 0)));
75 return result;
76#endif
77}
78
79double asin(double x) {
80 $abstract double ASIN(double X);
81
82 $assert(-1 <= x && x <= 1);
83 "Argument x should be in interval[-1, 1]";
84 return ASIN(x);
85}
86
87float asinf(float x) {
88 $abstract float ASINF(float X);
89
90 $assert(-1 <= x && x <= 1);
91 "Argument x should be in interval[-1, 1]";
92 return ASINF(x);
93}
94
95long double asinl(long double x) {
96 $abstract long double ASINL(long double X);
97
98 $assert(-1 <= x && x <= 1);
99 "Argument x should be in interval[-1, 1]";
100 return ASINL(x);
101}
102
103double atan(double x) {
104 $abstract double ATAN(double X);
105 return ATAN(x);
106}
107
108float atanf(float x) {
109 $abstract float ATANF(float X);
110 return ATANF(x);
111}
112
113long double atanl(long double x) {
114 $abstract long double ATANL(long double X);
115 return ATANL(x);
116}
117
118double atan2(double x, double y) {
119 $abstract double ATAN2(double X, double Y);
120
121 $assert(x!=0 || y !=0, "Arguments x and y"
122 "should not be both 0");
123 return ATAN2(x, y);
124}
125
126float atan2f(float x, float y) {
127 $abstract float ATAN2F(float X, float Y);
128
129 $assert(x!=0.0 || y !=0.0, "Arguments x and y should not be both 0");
130 return ATAN2F(x, y);
131}
132
133long double atan2l(long double x, long double y) {
134 $abstract long double ATAN2L(long double X,
135 long double Y);
136
137 $assert(x!=0.0 || y !=0.0, "Arguments x and y should not be both 0");
138 return ATAN2L(x, y);
139}
140
141double cos(double x) {
142 $abstract double COS(double X);
143
144 return COS(x);
145}
146
147float cosf(float x) {
148 $abstract float COSF(float X);
149
150 return COSF(x);
151}
152
153long double cosl(long double x) {
154 $abstract long double COSL(long double X);
155
156 return COSL(x);
157}
158
159double sin(double x) {
160 $abstract double SIN(double X);
161
162 return SIN(x);
163}
164
165float sinf(float x) {
166 $abstract float SINF(float X);
167
168 return SINF(x);
169}
170
171long double sinl(long double x) {
172 $abstract long double SINL(long double X);
173
174 return SINL(x);
175}
176
177double tan(double x) {
178 $abstract double TAN(double X);
179
180 return TAN(x);
181}
182
183float tanf(float x) {
184 $abstract float TANF(float X);
185
186 return TANF(x);
187}
188
189long double tanl(long double x) {
190 $abstract long double TANL(long double X);
191
192 return TANL(x);
193}
194
195double acosh(double x) {
196 $abstract double ACOSH(double X);
197
198 $assert(x >= 1, "Argument x should not less than 1.");
199 return ACOSH(x);
200}
201
202float acoshf(float x) {
203 $abstract float ACOSHF(float X);
204
205 $assert(x >= 1, "Argument x should not less than 1.");
206 return ACOSHF(x);
207}
208
209long double acoshl(long double x) {
210 $abstract long double ACOSHL(long double X);
211
212 $assert(x >= 1, "Argument x should not less than 1.");
213 return ACOSHL(x);
214}
215
216double asinh(double x) {
217 $abstract double ASINH(double X);
218
219 return ASINH(x);
220}
221
222float asinhf(float x) {
223 $abstract float ASINHF(float X);
224
225 return ASINHF(x);
226}
227
228long double asinhl(long double x) {
229 $abstract long double ASINHL(long double X);
230
231 return ASINHL(x);
232}
233
234double atanh(double x) {
235 $abstract double ATANH(double X);
236
237 $assert(-1 < x && x < 1, "Argument x should be in the interval (-1, 1)");
238 return ATANH(x);
239}
240
241float atanhf(float x) {
242 $abstract float ATANHF(float X);
243
244 $assert(-1 < x && x < 1, "Argument x should be in the interval (-1, 1)");
245 return ATANHF(x);
246}
247
248long double atanhl(long double x) {
249 $abstract long double ATANHL(long double X);
250
251 $assert(-1 < x && x < 1, "Argument x should be in the interval (-1, 1)");
252 return ATANHL(x);
253}
254
255double cosh(double x) {
256 $abstract double COSH(double X);
257
258 return COSH(x);
259}
260
261float coshf(float x) {
262 $abstract float COSHF(float X);
263
264 return COSHF(x);
265}
266
267long double coshl(long double x) {
268 $abstract long double COSHL(long double X);
269
270 return COSHL(x);
271}
272
273double sinh(double x) {
274 $abstract double SINH(double X);
275
276 return SINH(x);
277}
278
279float sinhf(float x) {
280 $abstract float SINHF(float X);
281
282 return SINHF(x);
283}
284
285long double sinhl(long double x) {
286 $abstract long double SINHL(long double X);
287
288 return SINHL(x);
289}
290
291double tanh(double x) {
292 $abstract double TANH(double X);
293
294 return TANH(x);
295}
296
297float tanhf(float x) {
298 $abstract float TANHF(float X);
299
300 return TANHF(x);
301}
302
303long double tanhl(long double x) {
304 $abstract long double TANHL(long double X);
305
306 return TANHL(x);
307}
308
309double exp(double x) {
310 $abstract double EXP(double X);
311 double result = EXP(x);
312
313#ifdef MATH_ELABORATE_ASSUMPTIONS
314 if(x == 0)
315 return 1;
316 else {
317 $assume(result > 0);
318 return result;
319 }
320#elif defined(MATH_NO_ASSUMPTIONS)
321 return result;
322#else
323 $assume(((x==0 => result == 1) && (x!=0 => result > 0)));
324 return result;
325#endif
326}
327
328float expf(float x) {
329 $abstract float EXPF(float X);
330 double result = EXPF(x);
331
332#ifdef MATH_ELABORATE_ASSUMPTIONS
333 if(x == 0)
334 return 1;
335 else {
336 $assume(result > 0 );
337 return result;
338 }
339#elif defined(MATH_NO_ASSUMPTIONS)
340 return result;
341#else
342 $assume(((x==0 => result == 1) && (x!=0 => result > 0)));
343 return result;
344#endif
345}
346
347long double expl(long double x) {
348 $abstract long double EXPL(long double X);
349 double result = EXPL(x);
350
351#ifdef MATH_ELABORATE_ASSUMPTIONS
352 if(x == 0)
353 return 1;
354 else {
355 $assume(result > 0 );
356 return result;
357 }
358#elif defined(MATH_NO_ASSUMPTIONS)
359 return result;
360#else
361 $assume(((x==0 => result == 1) && (x!=0 => result > 0)));
362 return result;
363#endif
364}
365
366double exp2(double x) {
367 $abstract double EXP2(double X);
368 double result = EXP2(x);
369
370#ifdef MATH_ELABORATE_ASSUMPTIONS
371 if(x == 0)
372 return 1;
373 else {
374 $assume(result > 0 );
375 return result;
376 }
377#elif defined(MATH_NO_ASSUMPTIONS)
378 return result;
379#else
380 $assume(((x==0 => result == 1) && (x!=0 => result > 0)));
381 return result;
382#endif
383}
384
385float exp2f(float x) {
386 $abstract float EXP2F(float X);
387 double result = EXP2F(x);
388
389#ifdef MATH_ELABORATE_ASSUMPTIONS
390 if(x == 0)
391 return 1;
392 else {
393 $assume(result > 0 );
394 return result;
395 }
396#elif defined(MATH_NO_ASSUMPTIONS)
397 return result;
398#else
399 $assume(((x==0 => result == 1) && (x!=0 => result > 0)));
400 return result;
401#endif
402}
403
404long double exp2l(long double x) {
405 $abstract long double EXP2L(long double X);
406 double result = EXP2L(x);
407
408#ifdef MATH_ELABORATE_ASSUMPTIONS
409 if(x == 0)
410 return 1;
411 else {
412 $assume(result > 0 );
413 return result;
414 }
415#elif defined(MATH_NO_ASSUMPTIONS)
416 return result;
417#else
418 $assume(((x==0 => result == 1) && (x!=0 => result > 0)));
419 return result;
420#endif
421}
422
423double expm1(double x) {
424 $abstract double EXPM1(double X);
425 double result = EXPM1(x);
426
427#ifdef MATH_ELABORATE_ASSUMPTIONS
428 if(x == 0)
429 return 0;
430 else {
431 $assume(result > -1);
432 return result;
433 }
434#elif defined(MATH_NO_ASSUMPTIONS)
435 return result;
436#else
437 $assume(((x==0 => result == 0) && (x!=0 => result > -1)));
438 return result;
439#endif
440}
441
442float expm1f(float x) {
443 $abstract float EXPM1F(float X);
444 double result = EXPM1F(x);
445
446#ifdef MATH_ELABORATE_ASSUMPTIONS
447 if(x == 0)
448 return 0;
449 else {
450 $assume(result > -1);
451 return result;
452 }
453#elif defined(MATH_NO_ASSUMPTIONS)
454 return result;
455#else
456 $assume(((x==0 => result == 0) && (x!=0 => result > -1)));
457 return result;
458#endif
459}
460
461long double expm1l(long double x) {
462 $abstract long double EXPM1L(long double X);
463 double result = EXPM1L(x);
464
465#ifdef MATH_ELABORATE_ASSUMPTIONS
466 if(x == 0)
467 return 0;
468 else {
469 $assume(result > -1);
470 return result;
471 }
472#elif defined(MATH_NO_ASSUMPTIONS)
473 return result;
474#else
475 $assume(((x==0 => result == 0) && (x!=0 => result > -1)));
476 return result;
477#endif
478}
479
480double frexp(double x, int * exp) {
481 $abstract double FREXP_X(double X);
482 $abstract int FREXP_EXP(double X);
483
484 (*exp) = FREXP_EXP(x);
485 $assume((FREXP_X(x) >= 1/2 && FREXP_X(x) < 1) ||
486 FREXP_X(x) == 0);
487 return FREXP_X(x);
488}
489
490float frexpf(float x, int *exp) {
491 $abstract float FREXPF_X(float X);
492 $abstract int FREXPF_EXP(float X);
493
494 (*exp) = FREXPF_EXP(x);
495 $assume((FREXPF_X(x) >= 1/2 && FREXPF_X(x) < 1) ||
496 FREXPF_X(x) == 0);
497 return FREXPF_X(x);
498}
499
500long double frexpl(long double x, int *exp) {
501 $abstract long double FREXPL_X(long double X);
502 $abstract int FREXPL_EXP(long double X);
503
504 (*exp) = FREXPL_EXP(x);
505 $assume((FREXPL_X(x) >= 1/2 && FREXPL_X(x) < 1) ||
506 FREXPL_X(x) == 0);
507 return FREXPL_X(x);
508}
509
510int ilogb(double x) {
511 $abstract int ILOGB(double X);
512
513 //TODO: x can not be infinite or NaN neither.
514 $assert(x != 0, "Argument x cannot be zero.");
515 return ILOGB(x);
516}
517
518int ilogbf(float x) {
519 $abstract int ILOGBF(float X);
520
521 //TODO: x can not be infinite or NaN neither.
522 $assert(x != 0, "Argument x cannot be zero.");
523 return ILOGBF(x);
524}
525
526int ilogbl(long double x) {
527 $abstract int ILOGBL(long double X);
528
529 //TODO: x can not be infinite or NaN neither.
530 $assert(x != 0, "Argument x cannot be zero.");
531 return ILOGBL(x);
532}
533
534double ldexp(double x, int exp) {
535 $abstract double LDEXP(double X, int EXP);
536
537 return LDEXP(x, exp);
538}
539
540float ldexpf(float x, int exp) {
541 $abstract float LDEXPF(float X, int EXP);
542
543 return LDEXPF(x, exp);
544}
545
546long double ldexpl(long double x, int exp) {
547 $abstract long double LDEXPL(long double X, int EXP);
548
549 return LDEXPL(x, exp);
550}
551
552double log(double x) {
553 $abstract double LOG(double X);
554 double result = LOG(x);
555
556 $assert(x > 0, "Argument x should be greater than 0");
557#ifdef MATH_ELABORATE_ASSUMPTIONS
558 if(x == 1)
559 return 0;
560 else {
561 $assume(result != 0);
562 return result;
563 }
564#elif defined(MATH_NO_ASSUMPTIONS)
565 return result;
566#else
567 $assume(((x==1) => (result==0)) && ((x!=1) => (result!=0)));
568 return result;
569#endif
570}
571
572float logf(float x) {
573 $abstract float LOGF(float X);
574 float result = LOGF(x);
575
576 $assert(x > 0, "Argument x should be greater than 0");
577#ifdef MATH_ELABORATE_ASSUMPTIONS
578 if(x == 1)
579 return 0;
580 else {
581 $assume(result != 0);
582 return result;
583 }
584#elif defined(MATH_NO_ASSUMPTIONS)
585 return result;
586#else
587 $assume(((x==1) => (result==0)) && ((x!=1) => (result!=0)));
588 return result;
589#endif
590}
591
592long double logl(long double x) {
593 $abstract long double LOGL(long double X);
594 long double result = LOGL(x);
595
596 $assert(x > 0, "Argument x should be greater than 0");
597#ifdef MATH_ELABORATE_ASSUMPTIONS
598 if(x == 1)
599 return 0;
600 else {
601 $assume(result != 0);
602 return result;
603 }
604#elif defined(MATH_NO_ASSUMPTIONS)
605 return result;
606#else
607 $assume(((x==1) => (result==0)) && ((x!=1) => (result!=0)));
608 return result;
609#endif
610}
611
612double log10(double x) {
613 $abstract double LOG10(double X);
614 double result = LOG10(x);
615
616 $assert(x > 0, "Argument x should be greater than 0");
617#ifdef MATH_ELABORATE_ASSUMPTIONS
618 if(x == 1)
619 return 0;
620 else {
621 $assume(result != 0);
622 return result;
623 }
624#elif defined(MATH_NO_ASSUMPTIONS)
625 return result;
626#else
627 $assume(((x==1) => (result==0)) && ((x!=1) => (result!=0)));
628 return result;
629#endif
630}
631
632float log10f(float x) {
633 $abstract float LOG10F(float X);
634 float result = LOG10F(x);
635
636 $assert(x > 0, "Argument x should be greater than 0");
637#ifdef MATH_ELABORATE_ASSUMPTIONS
638 if(x == 1)
639 return 0;
640 else {
641 $assume(result != 0);
642 return result;
643 }
644#elif defined(MATH_NO_ASSUMPTIONS)
645 return result;
646#else
647 $assume(((x==1) => (result==0)) && ((x!=1) => (result!=0)));
648 return result;
649#endif
650}
651
652long double log10l(long double x) {
653 $abstract long double LOG10L(long double X);
654 long double result = LOG10L(x);
655
656 $assert(x > 0, "Argument x should be greater than 0");
657#ifdef MATH_ELABORATE_ASSUMPTIONS
658 if(x == 1)
659 return 0;
660 else {
661 $assume(result != 0);
662 return result;
663 }
664#elif defined(MATH_NO_ASSUMPTIONS)
665 return result;
666#else
667 $assume(((x==1) => (result==0)) && ((x!=1) => (result!=0)));
668 return result;
669#endif
670}
671
672double log1p(double x) {
673 $abstract double LOG1P(double X);
674
675 $assert(x > -1, "Argument x should be greater than -1");
676 return LOG1P(x);
677}
678
679float log1pf(float x) {
680 $abstract float LOG1PF(float X);
681
682 $assert(x > -1, "Argument x should be greater than -1");
683 return LOG1PF(x);
684}
685
686long double log1pl(long double x) {
687 $abstract long double LOG1PL(long double X);
688
689 $assert(x > -1, "Argument x should be greater than -1");
690 return LOG1PL(x);
691}
692
693double log2(double x) {
694 $abstract double LOG2(double X);
695 double result = LOG2(x);
696
697 $assert(x > 0, "Argument x should be greater than 0");
698#ifdef MATH_ELABORATE_ASSUMPTIONS
699 if(x == 1)
700 return 0;
701 else {
702 $assume(result != 0);
703 return result;
704 }
705#elif defined(MATH_NO_ASSUMPTIONS)
706 return result;
707#else
708 $assume(((x==1) => (result==0)) && ((x!=1) => (result!=0)));
709 return result;
710#endif
711}
712
713float log2f(float x) {
714 $abstract float LOG2F(float X);
715 float result = LOG2F(x);
716
717 $assert(x > 0, "Argument x should be greater than 0");
718 #ifdef MATH_ELABORATE_ASSUMPTIONS
719 if(x == 1)
720 return 0;
721 else {
722 $assume(result != 0);
723 return result;
724 }
725#elif defined(MATH_NO_ASSUMPTIONS)
726 return result;
727#else
728 $assume(((x==1) => (result==0)) && ((x!=1) => (result!=0)));
729 return result;
730#endif
731}
732
733long double log2l(long double x) {
734 $abstract long double LOG2L(long double X);
735 long double result = LOG2L(x);
736
737 $assert(x > 0, "Argument x should be greater than 0");
738#ifdef MATH_ELABORATE_ASSUMPTIONS
739 if(x == 1)
740 return 0;
741 else {
742 $assume(result != 0);
743 return result;
744 }
745#elif defined(MATH_NO_ASSUMPTIONS)
746 return result;
747#else
748 $assume(((x==1) => (result==0)) && ((x!=1) => (result!=0)));
749 return result;
750#endif
751}
752
753double logb(double x) {
754 $abstract double LOGB(double X);
755
756 $assert(x != 0, "Argument x should not equal to 0");
757 return LOGB(x);
758}
759
760float logbf(float x) {
761 $abstract float LOGBF(float X);
762
763 $assert(x != 0, "Argument x should not equal to 0");
764 return LOGBF(x);
765}
766
767long double logbl(long double x) {
768 $abstract long double LOGBL(long double X);
769
770 $assert(x != 0, "Argument x should not equal to 0");
771 return LOGBL(x);
772}
773
774double modf(double value, double *iptr) {
775 $abstract double MODF_VALUE(double v);
776 $abstract double MODF_EXP(double v);
777
778 (*iptr) = MODF_EXP(value);
779 return MODF_VALUE(value);
780}
781
782float modff(float value, float *iptr) {
783 $abstract float MODFF_VALUE(float v);
784 $abstract float MODFF_EXP(float v);
785
786 (*iptr) = MODFF_EXP(value);
787 return MODFF_VALUE(value);
788}
789
790long double modfl(long double value, long double *iptr) {
791 $abstract long double MODFL_VALUE(long double v);
792 $abstract long double MODFL_EXP(long double v);
793
794 (*iptr) = MODFL_EXP(value);
795 return MODFL_VALUE(value);
796}
797
798double scalbn(double x, int n) {
799 $abstract double SCALBN(double x, int n);
800
801 return SCALBN(x, n);
802}
803
804float scalbnf(float x, int n) {
805 $abstract float SCALBNF(float x, int n);
806
807 return SCALBNF(x, n);
808}
809
810long double scalbnl(long double x, int n) {
811 $abstract long double SCALBNL(long double x, int n);
812
813 return SCALBNL(x, n);
814}
815
816double scalbln(double x, int n) {
817 $abstract double SCALBLN(double x, int n);
818
819 return SCALBLN(x, n);
820}
821
822float scalblnf(float x, int n) {
823 $abstract float SCALBLNF(float x, int n);
824
825 return SCALBLNF(x, n);
826}
827
828long double scalblnl(long double x, int n) {
829 $abstract long double SCALBLNL(long double x, int n);
830
831 return SCALBLNL(x, n);
832}
833
834double cbrt(double x) {
835 $abstract double CBRT(double x);
836
837 return CBRT(x);
838}
839
840float cbrtf(float x) {
841 $abstract float CBRTF(float x);
842
843 return CBRTF(x);
844}
845
846long double cbrtl(long double x) {
847 $abstract long double CBRTL(long double x);
848
849 return CBRTL(x);
850}
851
852double fabs(double x) {
853 $abstract double FABS(double x);
854 double result = FABS(x);
855
856#ifdef MATH_ELABORATE_ASSUMPTIONS
857 if(x >= 0)
858 return x;
859 else
860 return -x;
861#elif defined(MATH_NO_ASSUMPTIONS)
862 return result;
863#else
864 $assume((x >= 0 => result == x) && (x < 0 => result == -x));
865 return result;
866#endif
867}
868
869float fabsf(float x) {
870 $abstract float FABSF(float x);
871 float result = FABSF(x);
872
873#ifdef MATH_ELABORATE_ASSUMPTIONS
874 if(x >= 0)
875 return x;
876 else
877 return -x;
878#elif defined(MATH_NO_ASSUMPTIONS)
879 return result;
880#else
881 $assume((x >= 0 => result == x) && (x < 0 => result == -x));
882 return result;
883#endif
884}
885
886long double fabsl(long double x) {
887 $abstract long double FABSL(long double x);
888 long double result = FABSL(x);
889
890#ifdef MATH_ELABORATE_ASSUMPTIONS
891 if(x >= 0)
892 return x;
893 else
894 return -x;
895#elif defined(MATH_NO_ASSUMPTIONS)
896 return result;
897#else
898 $assume((x >= 0 => result == x) && (x < 0 => result == -x));
899 return result;
900#endif
901}
902
903double sqrt(double x) {
904 $assert(x >= 0, "Argument x should be greater than 0.");
905 return $pow(x, 0.5);
906}
907
908float sqrtf(float x) {
909 $assert(x >= 0, "Argument x should be greater than 0.");
910 return $pow(x, 0.5);
911}
912
913long double sqrtl(long double x) {
914 $assert(x >= 0, "Argument x should be greater than 0.");
915 return $pow(x, 0.5);
916}
917
918double hypot(double x, double y) {
919 double xsqrPLUSysqr = x*x + y*y;
920
921 return sqrt(xsqrPLUSysqr);
922}
923
924float hypotf(float x, float y) {
925 double xsqrPLUSysqr = x*x + y*y;
926
927 return sqrtf(xsqrPLUSysqr);
928}
929
930long double hypotl(long double x, long double y) {
931 double xsqrPLUSysqr = x*x + y*y;
932
933 return sqrtl(xsqrPLUSysqr);
934}
935
936double pow(double x, double y) {
937 $assert(x != 0 || y > 0, "It's invalid that argument x "
938 "is 0 and y is no greater than 0.");
939 return $pow(x, y);
940}
941
942float powf(float x, float y) {
943 $assert(x != 0 || y > 0, "It's invalid that argument x "
944 "is 0 and y is no greater than 0.");
945 return $pow(x, y);
946}
947
948long double powl(long double x, long double y) {
949 $assert(x != 0 || y > 0, "It's invalid that argument x "
950 "is 0 and y is no greater than 0.");
951 return $pow(x, y);
952}
953
954double erf(double x) {
955 $abstract double ERF(double x);
956
957 return ERF(x);
958}
959
960float erff(float x) {
961 $abstract float ERFF(float x);
962
963 return ERFF(x);
964}
965
966long double erfl(long double x) {
967 $abstract long double ERFL(long double x);
968
969 return ERFL(x);
970}
971
972double erfc(double x) {
973 $abstract double ERFC(double x);
974
975 return ERFC(x);
976}
977
978float erfcf(float x) {
979 $abstract float ERFCF(float x);
980
981 return ERFCF(x);
982}
983
984long double erfcl(long double x) {
985 $abstract long double ERFCL(long double x);
986
987 return ERFCL(x);
988}
989
990double lgamma(double x) {
991 $abstract double LGAMMA(double x);
992
993 $assert((x > 0), "Argument x should be greater than 0");
994 return LGAMMA(x);
995}
996
997float lgammaf(float x) {
998 $abstract float LGAMMAF(float x);
999
1000 $assert((x > 0), "Argument x should be greater than 0");
1001 return LGAMMAF(x);
1002}
1003
1004long double lgammal(long double x) {
1005 $abstract long double LGAMMAL(long double x);
1006
1007 $assert((x > 0), "Argument x should be greater than 0");
1008 return LGAMMAL(x);
1009}
1010
1011double tgamma(double x) {
1012 $abstract double TGAMMA(double x);
1013
1014 $assert((x > 0), "Argument x should be greater than 0");
1015 return TGAMMA(x);
1016}
1017
1018float tgammaf(float x) {
1019 $abstract float TGAMMAF(float x);
1020
1021 $assert((x > 0), "Argument x should be greater than 0");
1022 return TGAMMAF(x);
1023}
1024
1025long double tgammal(long double x) {
1026 $abstract long double TGAMMAL(long double x);
1027
1028 $assert((x > 0), "Argument x should be greater than 0");
1029 return TGAMMAL(x);
1030}
1031
1032double ceil(double x) {
1033 $abstract double CEIL(double x);
1034
1035 $assume(CEIL(x) >= x && CEIL(x) < (x + 1));
1036 return CEIL(x);
1037}
1038
1039float ceilf(float x) {
1040 $abstract float CEILF(float x);
1041
1042 $assume(CEILF(x) >= x && CEILF(x) < (x + 1));
1043 return CEILF(x);
1044}
1045
1046long double ceill(long double x) {
1047 $abstract long double CEILL(long double x);
1048
1049 $assume(CEILL(x) >= x && CEILL(x) < (x + 1));
1050 return CEILL(x);
1051}
1052
1053double floor(double x) {
1054 $abstract double FLOOR(double x);
1055
1056 $assume(FLOOR(x) <= x && FLOOR(x) > (x - 1));
1057 return FLOOR(x);
1058}
1059
1060float floorf(float x) {
1061 $abstract float FLOORF(float x);
1062
1063 $assume(FLOORF(x) <= x && FLOORF(x) > (x - 1));
1064 return FLOORF(x);
1065}
1066
1067long double floorl(long double x) {
1068 $abstract long double FLOORL(long double x);
1069
1070 $assume(FLOORL(x) <= x && FLOORL(x) > (x - 1));
1071 return FLOORL(x);
1072}
1073
1074double nearbyint(double x) {
1075 $abstract double NEARBYINT(double x);
1076
1077 $assume(NEARBYINT(x) < (x+1) && NEARBYINT(x) > (x-1));
1078 return NEARBYINT(x);
1079}
1080
1081float nearbyintf(float x) {
1082 $abstract float NEARBYINTF(float x);
1083
1084 $assume(NEARBYINTF(x) < (x+1) && NEARBYINTF(x) > (x-1));
1085 return NEARBYINTF(x);
1086}
1087
1088long double nearbyintl(long double x) {
1089 $abstract long double NEARBYINTL(long double x);
1090
1091 $assume(NEARBYINTL(x) < (x+1) && NEARBYINTL(x) > (x-1));
1092 return NEARBYINTL(x);
1093}
1094
1095double rint(double x) {
1096 $abstract double RINT(double x);
1097
1098 $assume(RINT(x) < (x+1) && RINT(x) > (x-1));
1099 return RINT(x);
1100}
1101
1102float rintf(float x) {
1103 $abstract float RINTF(float x);
1104
1105 $assume(RINTF(x) < (x+1) && RINTF(x) > (x-1));
1106 return RINTF(x);
1107}
1108
1109long double rintl(long double x) {
1110 $abstract long double RINTL(long double x);
1111
1112 $assume(RINTL(x) < (x+1) && RINTL(x) > (x-1));
1113 return RINTL(x);
1114}
1115
1116long int lrint(double x) {
1117 $abstract long int LRINT(double x);
1118
1119 $assume(LRINT(x) < (x+1) && LRINT(x) > (x-1));
1120 return LRINT(x);
1121}
1122
1123long int lrintf(float x) {
1124 $abstract long int LRINTF(float x);
1125
1126 $assume(LRINTF(x) < (x+1) && LRINTF(x) > (x-1));
1127 return LRINTF(x);
1128}
1129
1130long int lrintl(long double x) {
1131 $abstract long int LRINTL(long double x);
1132
1133 $assume(LRINTL(x) < (x+1) && LRINTL(x) > (x-1));
1134 return LRINTL(x);
1135}
1136
1137long long int llrint(double x) {
1138 $abstract long long int LLRINT(double x);
1139
1140 $assume(LLRINT(x) < (x+1) && LLRINT(x) > (x-1));
1141 return LLRINT(x);
1142}
1143
1144long long int llrintf(float x) {
1145 $abstract long long int LLRINTF(float x);
1146
1147 $assume(LLRINTF(x) < (x+1) && LLRINTF(x) > (x-1));
1148 return LLRINTF(x);
1149}
1150
1151long long int llrintl(long double x) {
1152 $abstract long long int LLRINTL(long double x);
1153
1154 $assume(LLRINTL(x) < (x+1) && LLRINTL(x) > (x-1));
1155 return LLRINTL(x);
1156}
1157
1158double round(double x) {
1159 $abstract double ROUND(double x);
1160
1161 $assume(ROUND(x) < (x+1) && ROUND(x) > (x-1));
1162 return ROUND(x);
1163}
1164
1165float roundf(float x) {
1166 $abstract float ROUNDF(float x);
1167
1168 $assume(ROUNDF(x) < (x+1) && ROUNDF(x) > (x-1));
1169 return ROUNDF(x);
1170}
1171
1172long double roundl(long double x) {
1173 $abstract long double ROUNDL(long double x);
1174
1175 $assume(ROUNDL(x) < (x+1) && ROUNDL(x) > (x-1));
1176 return ROUNDL(x);
1177}
1178
1179long int lround(double x) {
1180 $abstract long int LROUND(double x);
1181
1182 $assume(LROUND(x) < (x+1) && LROUND(x) > (x-1));
1183 return LROUND(x);
1184}
1185
1186long int lroundf(float x) {
1187 $abstract long int LROUNDF(float x);
1188
1189 $assume(LROUNDF(x) < (x+1) && LROUNDF(x) > (x-1));
1190 return LROUNDF(x);
1191}
1192
1193long int lroundl(long double x) {
1194 $abstract long int LROUNDL(long double x);
1195
1196 $assume(LROUNDL(x) < (x+1) && LROUNDL(x) > (x-1));
1197 return LROUNDL(x);
1198}
1199
1200long long int llround(double x) {
1201 $abstract long long int LLROUND(double x);
1202
1203 $assume(LLROUND(x) < (x+1) && LLROUND(x) > (x-1));
1204 return LLROUND(x);
1205}
1206
1207long long int llroundf(float x) {
1208 $abstract long long int LLROUNDF(float x);
1209
1210 $assume(LLROUNDF(x) < (x+1) && LLROUNDF(x) > (x-1));
1211 return LLROUNDF(x);
1212}
1213
1214long long int llroundl(long double x) {
1215 $abstract long long int LLROUNDL(long double x);
1216
1217 $assume(LLROUNDL(x) < (x+1) && LLROUNDL(x) > (x-1));
1218 return LLROUNDL(x);
1219}
1220
1221double trunc(double x) {
1222 $abstract double TRUNC(double x);
1223
1224 $assume(TRUNC(x) < (x) && TRUNC(x) > (x-1));
1225 return TRUNC(x);
1226}
1227
1228float truncf(float x) {
1229 $abstract float TRUNCF(float x);
1230
1231 $assume(TRUNCF(x) < (x) && TRUNCF(x) > (x-1));
1232 return TRUNCF(x);
1233}
1234
1235long double truncl(long double x) {
1236 $abstract long double TRUNCL(long double x);
1237
1238 $assume(TRUNCL(x) < (x) && TRUNCL(x) > (x-1));
1239 return TRUNCL(x);
1240}
1241
1242double fmod(double x, double y) {
1243 $abstract double FMOD(double x, double y);
1244
1245 $assert(y != 0, "Argument y should not be 0");
1246 return FMOD(x,y);
1247}
1248
1249float fmodf(float x, float y) {
1250 $abstract float FMODF(float x, float y);
1251
1252 $assert(y != 0, "Argument y should not be 0");
1253 return FMODF(x,y);
1254}
1255
1256long double fmodl(long double x, long double y) {
1257 $abstract long double FMODL(long double x, long double y);
1258
1259 $assert(y != 0, "Argument y should not be 0");
1260 return FMODL(x,y);
1261}
1262
1263double remainder(double x, double y) {
1264 $abstract double REMAINDER(double x, double y);
1265
1266 $assert(y != 0, "Argument y should not be 0");
1267 return REMAINDER(x,y);
1268}
1269
1270float remainderf(float x, float y) {
1271 $abstract float REMAINDERF(float x, float y);
1272
1273 $assert(y != 0, "Argument y should not be 0");
1274 return REMAINDERF(x,y);
1275}
1276
1277long double remainderl(long double x, long double y) {
1278 $abstract long double REMAINDERL(long double x, long double y);
1279
1280 $assert(y != 0, "Argument y should not be 0");
1281 return REMAINDERL(x,y);
1282}
1283
1284
1285double remquo(double x, double y, int *quo) {
1286 $abstract double REMQUO(double x, double y);
1287 $abstract int REMQUO_QUO(double x, double y);
1288
1289 $assert(y != 0, "Argument y should not be 0");
1290 (*quo) = REMQUO_QUO(x, y);
1291 return REMQUO(x,y);
1292}
1293
1294float remquof(float x, float y, int *quo) {
1295 $abstract float REMQUOF(float x, float y);
1296 $abstract int REMQUOF_QUO(float x, float y);
1297
1298 $assert(y != 0, "Argument y should not be 0");
1299 (*quo) = REMQUOF_QUO(x, y);
1300 return REMQUOF(x,y);
1301}
1302
1303long double remquol(long double x, long double y, int *quo) {
1304 $abstract long double REMQUOL(long double x, long double y);
1305 $abstract int REMQUOL_QUO(long double x, long double y);
1306
1307 $assert(y != 0, "Argument y should not be 0");
1308 (*quo) = REMQUOL_QUO(x, y);
1309 return REMQUOL(x,y);
1310}
1311
1312double copysign(double x, double y) {
1313 $abstract double COPYSIGN(double x, double y);
1314
1315 return COPYSIGN(x,y);
1316}
1317
1318float copysignf(float x, float y) {
1319 $abstract float COPYSIGNF(float x, float y);
1320
1321 return COPYSIGNF(x,y);
1322}
1323
1324long double copysignl(long double x, long double y) {
1325 $abstract long double COPYSIGNL(long double x, long double y);
1326
1327 return COPYSIGNL(x,y);
1328}
1329
1330double nan(const char *tagp) {
1331 // changed by sfsiegel from NAN to CNAN
1332 // since NAN is already used
1333 $abstract double CNAN(const char *tagp);
1334
1335 return CNAN(tagp);
1336}
1337
1338float nanf(const char *tagp) {
1339 $abstract float NANF(const char *tagp);
1340
1341 return NANF(tagp);
1342}
1343
1344long double nanl(const char *tagp) {
1345 $abstract long double NANL(const char *tagp);
1346
1347 return NANL(tagp);
1348}
1349
1350double nextafter(double x, double y) {
1351 $abstract double NEXTAFTER(double x, double y);
1352
1353 return NEXTAFTER(x,y);
1354}
1355
1356float nextafterf(float x, float y) {
1357 $abstract float NEXTAFTERF(float x, float y);
1358
1359 return NEXTAFTERF(x,y);
1360}
1361
1362long double nextafterl(long double x, long double y) {
1363 $abstract long double NEXTAFTERL(long double x, long double y);
1364
1365 return NEXTAFTERL(x,y);
1366}
1367
1368double nexttoward(double x, long double y) {
1369 $abstract double NEXTTOWARD(double x, long double y);
1370
1371 return NEXTTOWARD(x,y);
1372}
1373
1374float nexttowardf(float x, long double y) {
1375 $abstract float NEXTTOWARDF(float x, long double y);
1376
1377 return NEXTTOWARDF(x,y);
1378}
1379
1380long double nexttowardl(long double x, long double y) {
1381 $abstract long double NEXTTOWARDL(long double x, long double y);
1382
1383 return NEXTTOWARDL(x,y);
1384}
1385
1386double fdim(double x, double y) {
1387 return (x>y)?(x-y):0;
1388}
1389
1390float fdimf(float x, float y) {
1391 return (x>y)?(x-y):0;
1392}
1393
1394long double fdiml(long double x, long double y) {
1395 return (x>y)?(x-y):0;
1396}
1397
1398double fmax(double x, double y) {
1399 return (x>y)?(x):(y);
1400}
1401
1402float fmaxf(float x, float y) {
1403 return (x>y)?(x):(y);
1404}
1405
1406long double fmaxl(long double x, long double y) {
1407 return (x>y)?(x):(y);
1408}
1409
1410double fmin(double x, double y) {
1411 return (x<y)?(x):(y);
1412}
1413
1414float fminf(float x, float y) {
1415 return (x<y)?(x):(y);
1416}
1417
1418long double fminl(long double x, long double y) {
1419 return (x<y)?(x):(y);
1420}
1421
1422double fma(double x, double y, double z) {
1423 $abstract double FMA(double x, double y, double z);
1424
1425 return FMA(x,y,z);
1426}
1427
1428float fmaf(float x, float y, float z) {
1429 $abstract float FMAF(float x, float y, float z);
1430
1431 return FMAF(x,y,z);
1432}
1433
1434long double fmal(long double x, long double y, long double z) {
1435 $abstract long double FMAL(long double x,
1436 long double y, long double z);
1437
1438 return FMAL(x,y,z);
1439}
1440
1441#define isgreater(X,Y) ((X)>(Y))
1442#define isgreaterequal(X,Y) ((X)>=(Y))
1443#define isless(X,Y) ((X)<(Y))
1444#define islessequal(X,Y) ((X)<=(Y))
1445#define islessgreater(X,Y) ((X)<(Y))||((X)>(Y))
1446#define isunordered(X,Y) (X>Y)?1:0
1447
1448#endif
1449
1450
Note: See TracBrowser for help on using the repository browser.