double データのビット・パターンを
,
からなる文字列
(型名を bdsd) に変換する関数 void double_to_bdsd(double, bdsd) と、
bsds データを表示する void print_bdsd(bdsd) を用意した。
| bdsd.h |
/* * bdsd.h */ #define NUM_BIN_DIGITS_DOUBLE 64 typedef char bin_digit_string_double[NUM_BIN_DIGITS_DOUBLE+1]; typedef bin_digit_string_double bdsd; void double_to_bin_digits(double, bdsd); void print_bdsd(bdsd); |
| bdsd.c |
/*
* bdsd.c
*/
#define NUM_BIN_DIGITS_INT 32
typedef char bds_int[NUM_BIN_DIGITS_INT+1];
#include <stdio.h>
#include "bdsd.h"
static void int_to_bin_digits(int x, bds_int s)
{
int keta;
s[NUM_BIN_DIGITS_INT - 1] = '0' + (x & 1);
x = (x >> 1) & 0x7fffffff;
for (keta = NUM_BIN_DIGITS_INT - 2; keta >= 0; keta--) {
s[keta] = '0' + (x & 1);
x = x >> 1;
}
s[NUM_BIN_DIGITS_INT] = 0;
}
void double_to_bin_digits(double x, bdsd bds)
{
union {
double x;
int xa[2];
} data;
data.x = x;
int_to_bin_digits(data.xa[1], bds);
int_to_bin_digits(data.xa[0], bds+NUM_BIN_DIGITS_INT);
}
void print_bdsd(bdsd a_bdsd)
{
int i;
printf("%c ", a_bdsd[0]);
for (i = 1; i <= 11; i++)
putchar(a_bdsd[i]);
printf(" %s", a_bdsd + 12);
}
|
桂田 祐史