18d904eef4897d3aef721e57a724a1b1244dd51fcsewardj 28d904eef4897d3aef721e57a724a1b1244dd51fcsewardj#include <stdio.h> 38d904eef4897d3aef721e57a724a1b1244dd51fcsewardj#include <math.h> 48d904eef4897d3aef721e57a724a1b1244dd51fcsewardj 58d904eef4897d3aef721e57a724a1b1244dd51fcsewardjdouble arg, res1, res2; 68d904eef4897d3aef721e57a724a1b1244dd51fcsewardj 78d904eef4897d3aef721e57a724a1b1244dd51fcsewardjextern void do_fxtract ( void ); 88d904eef4897d3aef721e57a724a1b1244dd51fcsewardjasm("\n" 98d904eef4897d3aef721e57a724a1b1244dd51fcsewardj".global do_fxtract\n" 108d904eef4897d3aef721e57a724a1b1244dd51fcsewardj"do_fxtract:\n" 118d904eef4897d3aef721e57a724a1b1244dd51fcsewardj"\tfinit\n" 128d904eef4897d3aef721e57a724a1b1244dd51fcsewardj"\tfldl arg\n" 138d904eef4897d3aef721e57a724a1b1244dd51fcsewardj"\tfxtract\n" 148d904eef4897d3aef721e57a724a1b1244dd51fcsewardj"\tfstpl res1\n" 158d904eef4897d3aef721e57a724a1b1244dd51fcsewardj"\tfstpl res2\n" 168d904eef4897d3aef721e57a724a1b1244dd51fcsewardj"\tret" 178d904eef4897d3aef721e57a724a1b1244dd51fcsewardj); 188d904eef4897d3aef721e57a724a1b1244dd51fcsewardj 198d904eef4897d3aef721e57a724a1b1244dd51fcsewardjvoid try ( double x ) 208d904eef4897d3aef721e57a724a1b1244dd51fcsewardj{ 218d904eef4897d3aef721e57a724a1b1244dd51fcsewardj arg = x * 1.414213562373049; 228d904eef4897d3aef721e57a724a1b1244dd51fcsewardj res1 = res2 = 0.0; 238d904eef4897d3aef721e57a724a1b1244dd51fcsewardj do_fxtract(); 248d904eef4897d3aef721e57a724a1b1244dd51fcsewardj printf("%17.10e -> %14.10f %14.10f\n", arg, res1, res2); 258d904eef4897d3aef721e57a724a1b1244dd51fcsewardj} 268d904eef4897d3aef721e57a724a1b1244dd51fcsewardj 278d904eef4897d3aef721e57a724a1b1244dd51fcsewardjint main ( void ) 288d904eef4897d3aef721e57a724a1b1244dd51fcsewardj{ 298d904eef4897d3aef721e57a724a1b1244dd51fcsewardj int i; 308d904eef4897d3aef721e57a724a1b1244dd51fcsewardj 318d904eef4897d3aef721e57a724a1b1244dd51fcsewardj /* positives */ 328d904eef4897d3aef721e57a724a1b1244dd51fcsewardj 338d904eef4897d3aef721e57a724a1b1244dd51fcsewardj for (i = 0; i < 40; i++) 348d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try( 1.27 + (double)(i*10 - 200) ); 358d904eef4897d3aef721e57a724a1b1244dd51fcsewardj 368d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(+0.0); 378d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(1.0 / 0.0); 388d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(sqrt(-1.0)); 398d904eef4897d3aef721e57a724a1b1244dd51fcsewardj 408d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(5.1e-308); 418d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(4.1e-308); 428d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(3.1e-308); 438d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(2.1e-308); 448d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(1.1e-308); 458d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(0.9e-308); 468d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(0.7e-308); 478d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(0.6e-308); 488d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(0.5e-308); 498d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(0.4e-308); 508d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(0.3e-308); 518d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(0.1e-308); 528d904eef4897d3aef721e57a724a1b1244dd51fcsewardj 538d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(1.3e-320); 548d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(1.3e-321); 558d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(1.3e-322); 568d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(1.3e-323); 578d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(0.9e-323); 588d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(0.7e-323); 598d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(0.5e-323); 608d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(0.3e-323); 618d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(0.2e-323); 628d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(1.3e-324); 638d904eef4897d3aef721e57a724a1b1244dd51fcsewardj 648d904eef4897d3aef721e57a724a1b1244dd51fcsewardj /* negatives */ 658d904eef4897d3aef721e57a724a1b1244dd51fcsewardj 668d904eef4897d3aef721e57a724a1b1244dd51fcsewardj printf("\n"); 678d904eef4897d3aef721e57a724a1b1244dd51fcsewardj for (i = 0; i < 40; i++) 688d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try( - (1.27 + (double)(i*10 - 200)) ); 698d904eef4897d3aef721e57a724a1b1244dd51fcsewardj 708d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-0.0); 718d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-(1.0 / 0.0)); 728d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-sqrt(-1.0)); 738d904eef4897d3aef721e57a724a1b1244dd51fcsewardj 748d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-5.1e-308); 758d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-4.1e-308); 768d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-3.1e-308); 778d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-2.1e-308); 788d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-1.1e-308); 798d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-0.9e-308); 808d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-0.7e-308); 818d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-0.6e-308); 828d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-0.5e-308); 838d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-0.4e-308); 848d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-0.3e-308); 858d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-0.1e-308); 868d904eef4897d3aef721e57a724a1b1244dd51fcsewardj 878d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-1.3e-320); 888d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-1.3e-321); 898d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-1.3e-322); 908d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-1.3e-323); 918d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-0.9e-323); 928d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-0.7e-323); 938d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-0.5e-323); 948d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-0.3e-323); 958d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-0.2e-323); 968d904eef4897d3aef721e57a724a1b1244dd51fcsewardj try(-1.3e-324); 978d904eef4897d3aef721e57a724a1b1244dd51fcsewardj 988d904eef4897d3aef721e57a724a1b1244dd51fcsewardj return 0; 998d904eef4897d3aef721e57a724a1b1244dd51fcsewardj} 100