1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h> 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <math.h> 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browndouble arg, res1, res2; 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern void do_fxtract ( void ); 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownasm("\n" 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown".global do_fxtract\n" 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"do_fxtract:\n" 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tfinit\n" 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tfldl arg\n" 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tfxtract\n" 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tfstpl res1\n" 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tfstpl res2\n" 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown"\tret" 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown); 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid try ( double x ) 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown arg = x * 1.414213562373049; 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown res1 = res2 = 0.0; 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown do_fxtract(); 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("%17.10e -> %14.10f %14.10f\n", arg, res1, res2); 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main ( void ) 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i; 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* positives */ 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i = 0; i < 40; i++) 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try( 1.27 + (double)(i*10 - 200) ); 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(+0.0); 37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(1.0 / 0.0); 38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(sqrt(-1.0)); 39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(5.1e-308); 41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(4.1e-308); 42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(3.1e-308); 43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(2.1e-308); 44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(1.1e-308); 45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(0.9e-308); 46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(0.7e-308); 47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(0.6e-308); 48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(0.5e-308); 49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(0.4e-308); 50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(0.3e-308); 51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(0.1e-308); 52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(1.3e-320); 54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(1.3e-321); 55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(1.3e-322); 56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(1.3e-323); 57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(0.9e-323); 58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(0.7e-323); 59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(0.5e-323); 60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(0.3e-323); 61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(0.2e-323); 62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(1.3e-324); 63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown /* negatives */ 65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf("\n"); 67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i = 0; i < 40; i++) 68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try( - (1.27 + (double)(i*10 - 200)) ); 69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-0.0); 71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-(1.0 / 0.0)); 72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-sqrt(-1.0)); 73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-5.1e-308); 75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-4.1e-308); 76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-3.1e-308); 77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-2.1e-308); 78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-1.1e-308); 79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-0.9e-308); 80ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-0.7e-308); 81ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-0.6e-308); 82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-0.5e-308); 83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-0.4e-308); 84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-0.3e-308); 85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-0.1e-308); 86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-1.3e-320); 88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-1.3e-321); 89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-1.3e-322); 90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-1.3e-323); 91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-0.9e-323); 92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-0.7e-323); 93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-0.5e-323); 94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-0.3e-323); 95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-0.2e-323); 96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown try(-1.3e-324); 97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 100