[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:09203] formatの動作



こんにちは。
NANRIです。

formatの動作を調べていて、期待する動きにならない部分を見つけました。

一つ目は"~F"です。
"~@F"と、@つきで指定すると正の数であっても符号がつくはずですが、つきませ
ん。パラメータをひとつでも指定すると符号がつくようになります。

  (format nil "~@F" 123.45)
  =>"123.45"                  ; "+123.45"になって欲しい
  (format nil "~0@F" 123.45)
  =>"+123.5"

もうひとつ"~E"にて、パラメータを指定していないと指数表記にならず、固定小
数点表記で表示されてしまいます。パラメータを指定すれば指数表記になります
が、ちょっと有効桁が多すぎる気がします。

  (format nil "~E" 123.45)
  =>"123.45"                  ; "1.2345e+2"になって欲しい 
  (format nil "~0E" 123.45)
  =>"1.23450e+2"              ; 0は余計では?

応急処置的なパッチを作ってみました。
CLHSのサンプル
http://www.lispworks.com/documentation/HyperSpec/Body/22_ck.htm
の範囲では期待する動作をすることを確認しています。

以上よろしくお願いします。

-- 
NANRI
southly@xxxxxxxxxxxx
http://raido.sakura.ne.jp/southly/rn/
# [xyzzy:09198] の件は直していただいたみたいでありがとうございました。

--- lprint.cc~	Sun Mar 10 04:43:29 2002
+++ lprint.cc	Wed Nov 15 00:03:44 2006
@@ -2397,6 +2397,7 @@
   if (!param_is_given (0) && !param_is_given (1))
     {
       print_control pc (10);
+      if (atsign && f.sign > 0) stream.add('+');
       print_flonum (stream, pc, lnumber);
       return;
     }
@@ -2528,18 +2529,18 @@
       return;
     }
 
-  if (!param_is_given (0) && !param_is_given (1) && !param_is_given (2))
-    {
-      print_control pc (10);
-      print_flonum (stream, pc, lnumber);
-      return;
-    }
+//   if (!param_is_given (0) && !param_is_given (1) && !param_is_given (2))
+//     {
+//       print_control pc (10);
+//       print_flonum (stream, pc, lnumber);
+//       return;
+//     }
 
   if (!param_is_given (2))
     e = exp_width (f.exp - k + 1);
 
   if (!param_is_given (1))
-    d = f.be - f.b0;
+    d = f.be - f.b0 - 1;
   if (k > 0)
     d = max (d, k - 1);
   else if (k < 0)

Index Home