モード判定

 投稿者:しばっち  投稿日:2016年 8月19日(金)21時51分8秒
  WHEN EXCEPTION IN
   LET X=SQR(-1)
   LET S=1
USE
   LET X$=STR$(MAXNUM)
   IF X$="1.E99" THEN
      LET S=2
   ELSEIF X$="1.79769313486232E308" THEN
      LET S=3
   ELSEIF X$="1.E1008" THEN
      LET S=4
   END IF
END WHEN
SELECT CASE S
CASE 1
   PRINT "複素数モード"
CASE 2
   PRINT "10進モード"
CASE 3
   PRINT "2進モード"
CASE 4
   PRINT "1000桁モード"
END SELECT
END
----------------------------------------------------------------
LET Y$=STR$(1/3)
LET X$=STR$(1-1/3*3)
IF POS(Y$,"/")>0 THEN
   LET S=1
ELSEIF POS(X$,"E")>0 THEN
   LET S=2
ELSEIF LEN(Y$)<20 THEN
   LET S=3
ELSEIF LEN(Y$)>=1000 THEN
   LET S=4
END IF
SELECT CASE S
CASE 1
   PRINT "有理数モード"
CASE 2
   PRINT "10進モード"
CASE 3
   PRINT "2進モード or 複素数モード"
CASE 4
   PRINT "1000桁モード"
END SELECT
END
 

Re: モード判定

 投稿者:nagram  投稿日:2016年 8月20日(土)22時23分57秒
  > No.4113[元記事へ]

こんなのは、どうでしょうか。

!OPTION ARITHMETIC DECIMAL_HIGH !RATIONAL !COMPLEX
DECLARE FUNCTION ARITHMETIC
PRINT ARITHMETIC
!
FUNCTION ARITHMETIC  ! 数値モード判別関数
! OPTION ARITHMETIC文を書かない1000桁モード,有理数モードでは、
! [オプション]→[数値]→[超越関数を使う]にチェックを入れる。
   LOCAL a,b
   SELECT CASE LEN(STR$(1/3))
   CASE 3
      LET ARITHMETIC=1/2  ! 有理数モード
   CASE IS >200
      LET ARITHMETIC=1000  ! 1000桁モード
   CASE ELSE
      LET a=1E-200
      IF a=0 THEN
         LET ARITHMETIC=10  ! 10進モード
      ELSE
         WHEN EXCEPTION IN
            LET b=LOG(-1)
            LET ARITHMETIC=-1  ! 複素数モード
         USE
            LET ARITHMETIC=2  ! 2進モード
         END WHEN
      END IF
   END SELECT
END FUNCTION
END
 

戻る