source: CIVL/text/include/math.cvl@ 7a5bc11

1.23 2.0 acw/focus-triggers main test-branch
Last change on this file since 7a5bc11 was 154f9a1, checked in by Ziqing Luo <ziqing@…>, 12 years ago

add link for math.h in ABC with math.cvl in CIVL
delete useless math.h in CIVL
modified math.cvl for more precise assumptions
modified corresponding tests

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

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