/*
 * num2float.c
 *
 * Convert number to C64 floating-point format -- slow but compact.
 *
 * SLJ 10/19/00
 */

#include <stdio.h>

int main(int argc, char** argv[])
{
    int i,sign,bit,byte,flag,count,ei;
    unsigned char digit[5];

    double num=1.4142135624,a;

    if (num == 0) printf("Oh come on.  Zero! 00 00 00 00 00\n");

    printf("Original number = %f\n",num);
    if (num < 0) {
	sign=128; 
	num = -num;
    } else sign=0;

    a = 1;
    for (i=0; i<126; i++) {		/* a = 2^126 */
	a = a*2;
    }

    byte=0;
    flag=0;
    count=0;

    for (i=126; i>=-128 && byte<4; i--) {
	if (num >= a) {
	    bit=1;
	    if (flag == 0) ei = i;
	    flag=1;
	} else bit=0;
	if (flag == 1) {
	    digit[byte] = digit[byte]*2 + bit;
	    count++;
	    if (count > 7) {
		count = 0;
		byte++;
	    }
	    num = num - a*bit;
	}
	a = a/2;
    }

    digit[0] = (digit[0]-128) | sign;

    printf("C64 float = %d %d %d %d %d\n",129 + ei,
		digit[0],digit[1],digit[2],digit[3]);
}
