#!	/bin/csh -f 
#
#	this tests if C rounds the return value to single precision in
#	functions of type float. (see sec. 9.10 of C ref. manual).
#
cat << 'EOT' >! /tmp/test_fltc.c
float temp;

float f1_(arg1,arg2)
float *arg1, *arg2;
{
	/* force float by storing in global */
	temp =  *arg1 / *arg2;
	return temp;
}

float f2_(arg1,arg2)
float *arg1, *arg2;
{
	/* should round since function is type float */
	return  *arg1 / *arg2;
}


float f3_(arg1,arg2)
float *arg1, *arg2;
{
	/* use a cast to try to force rounding */
	return ((float) (*arg1 / *arg2));
}

'EOT'
cat << 'EOT' >! /tmp/test_fltf.f
	integer f2ok, f3ok
	data f2ok/0/, f3ok/0/

	do 20 i = 1,10
	do 10 j = 1,10
	x = 0.1d0*i
	y = 0.1d0*j
	temp = f1(x,y)
	if( f2(x,y).eq.temp) f2ok = f2ok + 1
	if( f3(x,y).eq.temp) f3ok = f3ok + 1
10	continue
20	continue
	print *, "out of 100 tries, f2 was ok", f2ok, "times"
	print *, "out of 100 tries, f3 was ok", f3ok, "times"
	end
'EOT'
pushd /tmp
f77 test_fltc.c test_fltf.f -o test_flt
test_flt
