投稿者:荒田浩二
投稿日:2009年 8月12日(水)22時27分59秒
|
|
|
階乗,順列,組合せの組込み関数FACT(x),PERM(n,r),COMB(n,r)に不具合を発見したので報告します。
(1) FACT(x)を2進モード,複素数モードで実行した場合、xが小数のとき例外とならず誤った値を返す。
100 OPTION ARITHMETIC NATIVE
110 FOR x=-1 TO 4
120 WHEN EXCEPTION IN
130 PRINT x;FACT(x) ! 整数では問題ない
140 USE
150 END WHEN
160 NEXT x
170 PRINT
180 FOR x=-1 TO 4.0001 STEP 0.1
190 WHEN EXCEPTION IN
200 PRINT x;FACT(x) ! x<-0.5では例外が発生
210 USE
220 END WHEN
230 NEXT x
240 END
上記プログラムを10進15桁,1000桁,有理数の各モードで実行した場合、xが小数のときは例外が発生する。
(2) PERM(n,r);COMB(n,r)を2進モード,複素数モードで実行した場合、rが小数のとき例外とならずrを整数に丸めて得た値を返す。
400 OPTION ARITHMETIC NATIVE
410 LET n=6
420 FOR r=-2 TO 3.0001 STEP 0.1
430 WHEN EXCEPTION IN
440 PRINT n;r;" ---> ";PERM(n,r);COMB(n,r) ! r<-0.5では例外が発生
450 USE
460 END WHEN
470 NEXT r
480 END
上記プログラムを10進15桁,1000桁,有理数の各モードで実行した場合、rが小数のときは例外が発生する。
(3) PERM(n,r),COMB(n,r)でnが負数,小数のとき例外とならず誤った値を返す。
600 LET r=3
610 FOR n=-4 TO 5 STEP 0.2
620 WHEN EXCEPTION IN
630 PRINT n;r;" ===> ";PERM(n,r);COMB(n,r)
640 USE
650 END WHEN
660 NEXT n
670 END
|
|
|