コンテンツにスキップ

数学

数値型

最も一般的な2つの数値型は、Int32Float64です。名前の数字はビット単位のサイズを示します。Int32は32ビットの整数型Float64は64ビットの浮動小数点数です。

  • 整数リテラルは、先頭のゼロなしで1つ以上の10進数字(0-9)のシーケンスとして記述されます。デフォルトの型はInt32です。
  • 浮動小数点リテラルは、小数点を示す点(.)が途中にどこかにある、2つ以上の10進数字(0-9)のシーケンスとして記述されます。デフォルトの型はFloat64です。

すべての数値型では、途中の任意の場所にアンダースコアを使用できます。これは、大きな数字を読みやすく記述するのに役立ちます。100000100_000と書くことができます。

p! 1, typeof(1)
p! 1.0, typeof(1.0)
p! 100_000, typeof(100_000)
p! 100_000.0, typeof(100_000.0)

浮動小数点値は小数点付きで出力されます。整数値は出力されません。

情報

他にも多くの数値型がありますが、それらのほとんどは、バイナリプロトコル、特定の数値アルゴリズム、パフォーマンスの最適化など、特別なユースケースのみを対象としています。日常のプログラムでは、おそらくそれらは必要ありません。

すべてのプリミティブ数値型と代替表現の完全なリファレンスについては、整数リテラルリファレンス浮動小数点リテラルリファレンスを参照してください。

算術演算

等価比較

同じ数値の数字は、型に関係なく、等価演算子==に関して等しいと見なされます。

p! 1 == 1,
  1 == 2,
  1.0 == 1,
  -2000.0 == -2000

等価演算子に加えて、比較演算子もあります。これらは、2つの値間の関係を決定します。等価性と同様に、比較可能性も型に依存しません。

p! 2 > 1,
  1 >= 1,
  1 < 2,
  1 <= 2

汎用比較演算子は<=>で、その外観から*宇宙船演算子*とも呼ばれます。これはオペランドを比較し、ゼロ(両方のオペランドが等しい)、正の値(最初のオペランドの方が大きい)、または負の値(2番目のオペランドの方が大きい)のいずれかの値を返します。他のすべての比較演算子の動作を組み合わせたものです。

p! 1 <=> 1,
  2 <=> 1,
  1 <=> 2

演算子

基本的な算術演算は、演算子を使用して実行できます。ほとんどの演算子は*二項*(つまり、2つのオペランド)であり、中置記法(つまり、オペランドの間)で記述されます。一部の演算子は*単項*(つまり、1つのオペランド)であり、接頭辞記法(つまり、オペランドの前)で記述されます。式の値は、演算の結果です。

p! 1 + 1, # addition
  1 - 1,  # subtraction
  2 * 3,  # multiplication
  2 ** 4, # exponentiation
  2 / 3,  # division
  2 // 3, # floor division
  3 % 2,  # modulus
  -1      # negation (unary)

ご覧のとおり、整数オペランド間のこれらの演算のほとんどの結果も整数値です。除算演算子(/)は例外です。常に浮動小数点値を返します。ただし、床除算演算子(//)は整数値を返しますが、明らかに整数精度に縮小されます。整数と浮動小数点オペランド間の演算は、常に浮動小数点値を返します。それ以外の場合、戻り値の型は通常、最初のオペランドの型です。

情報

演算子の完全なリストは、演算子リファレンスにあります。

演算子の優先順位

複数の演算子が組み合わされている場合、どの順序で実行されるかという問題が発生します。数学では、乗算と除算が加算と減算よりも優先されるなど、いくつかの規則があります。 Crystalの演算子は、これらの優先順位規則を実装しています。

演算を構成するツールは括弧です。括弧内の演算子式は、常に外部演算子よりも優先されます。

p! 4 + 5 * 2,
  (4 + 5) * 2

情報

すべての優先順位規則は、演算子リファレンスに詳述されています。

数値メソッド

あまり一般的ではない数学演算は演算子ではなく、名前付きメソッドです。

p! -5.abs,   # absolute value
  4.3.round, # round to nearest integer
  5.even?,   # odd/even check
  10.gcd(16) # greatest common divisor

情報

数値メソッドの完全なリストは、Number APIドキュメント(サブタイプも確認)にあります。

数学メソッド

一部の算術メソッドは、数値型に直接定義されているのではなく、Math名前空間に定義されています。

p! Math.cos(1),     # cosine
  Math.sin(1),      # sine
  Math.tan(1),      # tangent
  Math.log(42),     # natural logarithm
  Math.log10(312),  # logarithm to base 10
  Math.log(312, 5), # logarithm to base 5
  Math.sqrt(9)      # square root

情報

数学メソッドの完全なリストは、Math APIドキュメントにあります。

定数

一部の数学定数は、Mathモジュールの定数として使用できます。

p! Math::E,  # Euler's number
  Math::TAU, # Full circle constant (2 * PI)
  Math::PI   # Archimedes' constant (TAU / 2)