西本です。

SEGV る件は解決しました。
まだ to_s がおかしいので、さらに以下のパッチを当ててください。


--- ruby-qfloat.c.org	Tue Nov 16 09:09:10 1999
+++ ruby-qfloat.c	Tue Nov 16 09:24:28 1999
@@ -62,30 +62,28 @@
 rb_qtoasc(self)
 VALUE self;
 {
-    VALUE res = rb_str_new(0, MAXQLEN);
+    char res[MAXQLEN];
     QELT *q;
 
     GetQval(self, q);
 
     if (qcmp(q, inf) == 0)
     {
-	strcpy(RSTRING(res)->ptr, "INF");
+	strcpy(res, "INF");
 
-	return res;
+	return rb_str_new2(res);
     }
 
     if (qcmp(q, ninf) == 0)
     {
-	strcpy(RSTRING(res)->ptr, "NINF");
+	strcpy(res, "NINF");
 
-	return res;
+	return rb_str_new2(res);
     }
 
-    /* clear string, because of bug of qtoasc() */
-    memset(RSTRING(res)->ptr, 0, MAXQLEN);
-    qtoasc(q, RSTRING(res)->ptr, prec);
+    qtoasc(q, res, prec);
 
-    return res;
+    return rb_str_new2(res);
 }
 
 VALUE
@@ -96,7 +94,7 @@
     QELT *q;
 
     GetQval(self, q);
-    qtoe(q, &e);
+    qtoe(q, (unsigned short*)&e);
 
     return rb_float_new(e);
 }
@@ -131,7 +129,7 @@
     QELT *new = ALLOC_N(QELT, NQ);
     double tmp = RFLOAT(self)->value;
 
-    etoq(&tmp, new);
+    etoq((unsigned short*)&tmp, new);
 
     return Data_Wrap_Struct(rb_cQfloat, 0, free, new);
 }