source: trunk/minix/lib/ack/float/cif4.fc@ 15

Last change on this file since 15 was 9, checked in by Mattia Monga, 14 years ago

Minix 3.1.2a

File size: 1.3 KB
Line 
1/*
2 (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands.
3 See the copyright notice in the ACK home directory, in the file "Copyright".
4*/
5
6/* $Header: /cvsup/minix/src/lib/ack/float/cif4.fc,v 1.1 2005/10/10 15:27:42 beng Exp $ */
7
8/*
9 CONVERT INTEGER TO SINGLE (CIF n 4)
10
11 THIS ROUTINE WORKS BY FILLING AN EXTENDED
12 WITH THE INTEGER VALUE IN EXTENDED FORMAT
13 AND USES COMPACT() TO PUT IT INTO THE PROPER
14 FLOATING POINT PRECISION.
15*/
16
17#include "FP_types.h"
18
19void
20cif4(ss,src)
21int ss; /* source size */
22long src; /* largest possible integer to convert */
23{
24 EXTEND buf;
25 short *ipt;
26 long i_src;
27 SINGLE *result;
28
29 zrf_ext(&buf);
30 if (ss == sizeof(long)) {
31 buf.exp = 31;
32 i_src = src;
33 result = (SINGLE *) &src;
34 }
35 else {
36 ipt = (short *) &src;
37 i_src = (long) *ipt;
38 buf.exp = 15;
39 result = (SINGLE *) &ss;
40 }
41 if (i_src == 0) {
42 *result = (SINGLE) 0L;
43 return;
44 }
45 /* ESTABLISHED THAT src != 0 */
46 /* adjust exponent field */
47 buf.sign = (i_src < 0) ? 0x8000 : 0;
48 /* clear sign bit of integer */
49 /* move to mantissa field */
50 buf.m1 = (i_src < 0) ? -i_src : i_src;
51 /* adjust mantissa field */
52 if (ss != sizeof(long))
53 buf.m1 <<= 16;
54 nrm_ext(&buf); /* adjust mantissa field */
55 compact(&buf, result,sizeof(SINGLE)); /* put on stack */
56}
Note: See TracBrowser for help on using the repository browser.