LoginSignup
1
0

More than 1 year has passed since last update.

様々な数値 ― J 言語入門

Last updated at Posted at 2020-10-30

もう一度数値の話に戻ります。ここでは、多様な数値リテラルと、数値の型について書きます。

J807 以前のバージョンでは、振る舞いが異なる場合があります。

型を調べる

値 (noun) の型を調べるには、datatype という verb を使います。(datatype は標準ライブラリで定義されています。)

   datatype 123
integer

ブーリアン

数値リテラルのうち、01特殊な扱いになっていて、boolean 型に分類されます。

   datatype 0
boolean
   datatype 1
boolean   

01 は この通りに (1 文字で) 表記する必要があり、0001 のようなリテラルは boolean ではありません

整数と小数

整数リテラルは、基本的には integer 型になります。integer は、64 bit 1 符号付き整数です。

   datatype 2
integer
   datatype _1
integer
   datatype 01    NB. 1 と書くと boolean になる
integer

小数点 (.) を含むリテラルや、integer の範囲外の整数は、IEEE 754 倍精度浮動小数点数 (floating) を表します。

   datatype 1.    NB. 1.0
floating
   datatype _1.23
floating
   datatype 12345678901234567890
floating
   datatype _
floating

指数表記

e を用いた指数表記 (scientific notation) も同様に、integer / floating になります。

   datatype _1e3   NB. _1000
integer
   datatype 1e_2   NB. 0.01
floating
   datatype 1.e3
floating
   datatype 3.456e_7
floating
   datatype 1e20
floating

N 進数

b を使うと、N 進表記のリテラルを書けます。

   16bff          NB. 十六進数
255
   2b01101001     NB. 二進数
105

b の前には基数を置き、後ろに数字 (0-9, a-z) を並べます。大文字の A-Z は使えません。整数だけでなく、小数も表記できます。

   NB. 2 + 12(c) * 16^-1
   16b2.c
2.75

型は、指数表記と同様、小数点の有無と値の範囲から決定されます。

数学定数

e や π の絡んだ定数を書くときに使える記法です。

   2x_1     NB. 2 * e^-1
0.735759
   _0.8p2   NB. _0.8 * π^2
_7.89568

型は、指数表記と同様、小数点の有無と値の範囲から決定されます 2

複素数

J では、複素数を表すのに 3 種類のリテラルが使えます。複素数は、実部と虚部の 2 つの floating の組です 3

最もよく使うのが、j を使った表記です (i ではないので注意)。

   1.2j3.4     NB. 1.2 + 3.4i
1.2j3.4
   0j_1        NB. 0 - i
0j_1
   datatype 1j1
complex

複素数の型は complex です。

極形式

J には、極形式 (絶対値と偏角) で複素数を表すリテラルもあります。偏角の単位がラジアンの場合は ar、度 (°) の場合は ad を使います。

   2ar1
1.0806j1.68294
   1ad45
0.707107j0.707107

多倍長整数

J では、多倍長整数も扱うことができます。整数の後ろに x を付けます。もちろん、小数点を含むことはできません。

   1x
1
   12345678901234567890x
12345678901234567890

多倍長整数の型は extended で表されます。

   datatype 0x
extended

有理数 (分数)

有理数リテラルには、r を使います。有理数は、分子と分母の 2 つの多倍長整数の組で表されます。

   1r2      NB. 1/2
1r2
   12r18
2r3
   2r_7
_2r7
   datatype 1r2
rational

有理数は rational 型です。

ベクターの型

ベクターのリテラルの場合は、ベクターを構成する数値の うち、最も精度が高い (と見なされる) 型が選択されます。

   datatype 1 0 0 1
boolean
   datatype 0 123
integer
   datatype 0 _12 3.45
floating
   datatype 0 1 __
floating
   datatype 1r2 0.5     NB. 1r2 が floating に変換される
floating

数値型の精度は、低い方から順に

  • boolean
  • integer
  • extended
  • rational
  • floating
  • complex

と定められています 4


[ 前 : ボックス ] [ 目次 ] [ 次 : 数学関数 ]


  1. ワード長に依存するので、 32 bit の OS の場合は 32 bit になります。 

  2. ほとんどの場合 floating ですが、1x0 (0 乗) のようなケースでは integer になります。 

  3. そのため、単に「2 つの数値 (実数) のペア」として使われることもあります。 

  4. rational から floating への変換のように、実際には精度が下がる場合もあるので注意してください。 

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0