|
|
1.1 root 1: #! /bin/csh -f
2: #
3: # this tests if C rounds the return value to single precision in
4: # functions of type float. (see sec. 9.10 of C ref. manual).
5: #
6: cat << 'EOT' >! /tmp/test_fltc.c
7: float temp;
8:
9: float f1_(arg1,arg2)
10: float *arg1, *arg2;
11: {
12: /* force float by storing in global */
13: temp = *arg1 / *arg2;
14: return temp;
15: }
16:
17: float f2_(arg1,arg2)
18: float *arg1, *arg2;
19: {
20: /* should round since function is type float */
21: return *arg1 / *arg2;
22: }
23:
24:
25: float f3_(arg1,arg2)
26: float *arg1, *arg2;
27: {
28: /* use a cast to try to force rounding */
29: return ((float) (*arg1 / *arg2));
30: }
31:
32: 'EOT'
33: cat << 'EOT' >! /tmp/test_fltf.f
34: integer f2ok, f3ok
35: data f2ok/0/, f3ok/0/
36:
37: do 20 i = 1,10
38: do 10 j = 1,10
39: x = 0.1d0*i
40: y = 0.1d0*j
41: temp = f1(x,y)
42: if( f2(x,y).eq.temp) f2ok = f2ok + 1
43: if( f3(x,y).eq.temp) f3ok = f3ok + 1
44: 10 continue
45: 20 continue
46: print *, "out of 100 tries, f2 was ok", f2ok, "times"
47: print *, "out of 100 tries, f3 was ok", f3ok, "times"
48: end
49: 'EOT'
50: pushd /tmp
51: f77 test_fltc.c test_fltf.f -o test_flt
52: test_flt
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.