/****************************************************************************/ /* (C) Copyright 1993 Universidade Estadual de Campinas (UNICAMP) */ /* Campinas, SP, Brazil */ /* */ /* This file can be freely distributed, modified, and used for any */ /* non-commercial purpose, provided that this copyright and authorship */ /* notice be included in any copy or derived version of this file. */ /* */ /* DISCLAIMER: This software is offered ``as is'', without any guarantee */ /* as to fitness for any particular purpose. Neither the copyright */ /* holder nor the authors or their employers can be held responsible for */ /* any damages that may result from its use. */ /****************************************************************************/ char *aat_gtag = "g14"; char *aat_gname = "y = 1/32 +/- 1/32;\nr2 = x^2 + y^2;\nxy = x*y;\nfa = (r^2 + xy - 1/4)^3;\nfb = (r^2 - xy - 1/4)^3;\ng = fa + fb - fa*fb"; Float aat_f_flt (Float x, Float y); Interval aat_f_ia (Interval x, Interval y); AAP aat_f_aa (AAP x, AAP y); Float aat_f_flt (Float x, Float y) { ROUND_NEAR; { Float ha = x*x + y*y + x*y - Quarter; Float fa = ha*ha*ha; Float hb = x*x + y*y - x*y - Quarter; Float fb = hb*hb*hb; Float res = (fa + fb - fa*fb); return (res); } } Float aat_g_flt (Float x) { Float y = (1.0 + sin(32.0*3.1415926*x))/32.0; return(aat_f_flt(x, y)); } Interval aat_f_ia (Interval x, Interval y) { Interval x2 = ia_sqr(x); Interval y2 = ia_sqr(y); Interval r2 = ia_add(x2, y2); Interval xy = ia_mul(x, y); Interval ha = ia_shift(ia_add(r2, xy), -Quarter); Interval fa = ia_mul(ia_sqr(ha), ha); Interval hb = ia_shift(ia_sub(r2, xy), -Quarter); Interval fb = ia_mul(ia_sqr(hb), hb); Interval fafb = ia_mul(fa, fb); Interval res = ia_sub (ia_add(fa, fb), fafb); return (res); } Interval aat_g_ia (Interval x) { Interval y = ia_const(1/32.0, 1/32.0); return(aat_f_ia(x, y)); } AAP aat_f_aa (AAP x, AAP y) { MemP frame = aa_top(); AAP x2 = aa_sqr(x); AAP y2 = aa_sqr(y); AAP r2 = aa_add(x2, y2); AAP xy = aa_mul(x, y); AAP ha = aa_shift(aa_add(r2, xy), -Quarter); AAP fa = aa_mul(aa_sqr(ha), ha); AAP hb = aa_shift(aa_sub(r2, xy), -Quarter); AAP fb = aa_mul(aa_sqr(hb), hb); AAP fafb = aa_mul(fa, fb); AAP res = aa_sub (aa_add(fa, fb), fafb); return (aa_return(frame, res)); } AAP aat_g_aa (AAP x) { MemP frame = aa_top(); AAP y = aa_const(1/32.0, 1/32.0); return(aa_return(frame, aat_f_aa(x, y))); } Interval aat_gxd = {-One, One}; Interval aat_gyd = {-One, One}; int aat_gn = 32;