2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

標準 Pascal と数

Last updated at Posted at 2024-02-04

はじめに

標準 Pascal と数についてのおさらいです (ちょびっと Delphi)。

自然数 (ℕ) は整数 (ℤ) に含まれ、整数は有理数 (ℚ) に含まれ、有理数は実数 (ℝ) に含まれます (ℕ⊂ℤ⊂ℚ⊂ℝ)。

■ 自然数 (Natural Number)

一般

加算 減算 乗算 除算
  • 1 (または 0) から始まる順序を表す数
  • 正の整数
  • 記号は ℕ
  • 自然数同士の四則演算では加算と乗算が完全に可能
  • 負数 (または 0) が扱えないため、減算を行えない事がある
  • 小数を扱えないため、除算を行えない事がある
  • コンピュータでは 符号なし整数型 (unsigned integer type) で扱える

Pascal

  • 標準 Pascal に符号なし整数型はないため、整数型 (Integer)部分範囲型 で扱う
  • 次の数 (successor) を表す順序型関数 Succ() が用意されている
  • 順序値を表す順序型関数 Ord() が用意されている

例えば byte 型 (UInt8) は部分範囲型を使って次のように定義する事ができます。

type
  byte = 0..255;

標準 Pascal の場合、次の順序値が存在しない場合に順序型関数 Succ() はエラーを返しますが、Delphi だとエラーにならない事があります。次のコードは Delphi だと 0 が表示されます。

program SuccTest(output);
type
  byte = 0..255;
var
  v: byte;
begin
  v := 255;
  v := Succ(v);
  Writeln(v);
end.

コンパイラ指令 {$R+} で範囲チェックを行うようにすれば実行時エラーになります。

program SuccTest(output);
{$R+}
  ...

Delphi には Byte 型をはじめとした符号なし整数型が複数用意されています。

See also:

■ 整数 (Integer)

一般

加算 減算 乗算 除算
  • 1 に 1 ずつ足した数と 1 ずつ引いた数
  • 記号は ℤ
  • 整数同士の四則演算では加算、減算、乗算が完全に可能
  • 小数を扱えないため、除算を行えない事がある
  • コンピュータでは 符号付き整数型 (integer type) で扱える

Pascal

  • 標準 Pascal では 整数型 (Integer) で扱う
  • 整数型は 単純型 (Simple types) の一種で、順序型 (Ordinal types) の一種
  • 整数除算 (商のみを返す) を行うための演算子 div が用意されている
  • 剰余を求める演算子 mod が用意されている
  • 前の数 (predecessor) を表す順序型関数 Pred() が用意されている
  • 整数の最大値を示す定数 maxint が用意されている

See also:

■ 有理数 (Rational Number)

一般

加算 減算 乗算 除算
  • 整数の比 (レシオ) で表す事の出来る実数
  • 一般的には分数
  • 記号は ℚ
  • 有理数同士の四則演算はすべて完全に可能 1
  • コンピュータでは 実数型 (real data type) で扱う事になる

Pascal

  • (特になし)

See also:

■ 実数 (Real Number)

一般

加算 減算 乗算 除算
  • 一般的な数 (有理数と無理数)
  • 記号は ℝ
  • 実数同士の四則演算はすべて完全に可能 1
  • コンピュータでは 実数型 (real data type) で扱える

Pascal

  • 標準 Pascal の実数型である Real 型は 48bit
  • 実数型は 単純型 (Simple types) の一種
  • 実数型に整数値を格納する事は可能 (ℤ⊂ℝ)
  • 整数型に実数値を格納するには変換関数を使い、小数部の処理方法を指定する必要がある
  • 実数型を整数型に丸める Round() 関数が用意されている
  • 実数型を整数型に切り捨てる Trunc() 関数が用意されている
  • 実数は指数表現で表す事もできる (ex. 5e-8)

Pascal の古い仕様では Real 型は実数の部分集合という扱いでした。概念的にはそうなのでしょうが、Pascal の集合型ではどうやっても Real 型と同等な型を定義できません。コンピュータのリソースには限りがありますからね。

See also:

おわりに

数について学ぶと、標準 Pascal にあるルーチンや演算子の存在する理由がなんとなく解ります。

標準 Pascal には複素数 (ℂ) を計算するための機能が備わっていません。

  • コンピュータアルゴリズム辞典』には Pascal で書かれた複素数を計算するアルゴリズムが掲載されています
  • Delphi には複素数 (ℂ) の計算を行うためのルーチンが格納された System.VarCmplx ユニットが用意されています

See also:

  1. 0 除算は考えないものとする。 2

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?