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