数値計算ライブラリ プロシージャでの数量

要約:
  • 数値計算ライブラリの一部のプロシージャは、数量をサポートしています。
  • 数量への変換および数量からの変換を行うことができます。
  • 特別な number? プロシージャ、scalar? プロシージャ、および SI-value プロシージャを数量に対して使用できます。
Curl® 言語の数値計算ライブラリには、引数として数量を必要とするプロシージャや、数量である結果を返すプロシージャなど、数多くのプロシージャがあります。たとえば、三角関数のプロシージャの大半は、角度の数量を引数として求め、Angle 型の結果を返します。

例: 角度を使用する数値計算ライブラリ プロシージャ
{cos 60deg}          || The cosine of 60 degrees

{sin 0.5rad}         || The sine of 0.5 radians

{tan 45deg}          || The tangent of 45 degrees

{value {atan 1.0} == 45deg}  || The arctangent of 1.0
次の表に、数量をサポートする数値計算ライブラリ プロシージャを示します。
演算子説明
abs絶対値
acos逆余弦関数
asin逆正弦関数
atan逆正接関数
atan22 つの引数の逆正接関数
cos余弦関数
interpolate相互関数
max最大値
min最小値
powべき関数
sin正弦関数
sqrt平方根
tan正接関数
Curl 言語の数値計算ライブラリの詳細については、「数値計算ライブラリ」を参照してください。

単位なし数量

関連付けられた測定単位のない数量は、他の数値と同様に表されるだけです。Curl 言語の数値は、単位なし数量と考えることもできます。たとえば、0.10.1f12in/3in などは単位なし数量です。
数量の演算結果、単位にゼロ (0) の累乗が伴う場合は、単位なし数量が生成されます。次に例を示します。

例: 単位なしの結果を伴う数量の演算
|| Dividing 6 meters by 2 meters, results in 3 (a unitless
|| quantity.
{value 1m / 20cm}
数量を演算する場合は、number? プロシージャを使用すれば、数量式内のすべての単位が互いに消されて結果が単位なしになるかどうかをテストできます。「値が単位なし数量であるかどうかのテスト」の例を参照してください。

パーセント

Percent 型は、単位なし数量型であり、数値型 double の別名です。変数をこの型や double に、あるいは Fraction のような別の単位なし型に代入しても、計算や値に影響はありませんが、変数の用途や範囲を示しやすくするのに役立つ可能性があります。
パーセントの計算時に直接的に使用することが多いのは % サフィックスで、このサフィックスは、その前の数値を 100 で除算する換算係数として作用します。次に例を示します。

例: パーセントの演算
|| Comparing a percentage with a decimal number
Is 50% equal to .5? ... {value 50% == .5}

|| Add two percentages
{value 30% + 50%}

|| Compute the percentage of a quantity
{value 25% * 200m}

数量の変換

Curl 言語では、以下の方法で、数量へ変換および数量からの変換を行うことができます。

値と数量の変換

数値から数量を作成する場合は、値と目的の 1 単位の数量とを乗算できます。

例: 数値からの数量の作成
|| Declare and initialize "f" a floating-point number.
{let f:float = 5}

|| "f" as a distance in meters.
{value f * 1m}

|| "f" as a distance in yards.
{value f * 1yd}

|| "f" as a time in seconds.
{value f * 1s}
同様に、数量から数値を抽出する場合は、適合する単位で数量を除算できます。このメカニズムを利用して、同等の測定単位で数量の値を決定することもできます。これは、数量と既定でない測定単位を表示するために利用される、ユーザーが設定した方法でもあります。

例: 数量からの値の作成
|| Declare and initialize "q" a quantity.
{let q:Distance = 5m}

|| "q" as a value in meters.
{value q / 1m} meters

|| "q" as a value in centimeters.
{value q / 1cm} centimeters

|| "q" as a value in millimeters.
{value q / 1mm} millimeters

|| "q" as a value in yards.
{value q / 1yards} yards

|| "q" as a value in feet.
{value q / 1foot} feet

SI-value の使用

数量を別の測定単位に変換するためにユーザーが設定した方法は、「値と数量の変換」セクションで説明した除算方法です。ただし、正確なデータ型がわからず、any 型の変数に格納されている可能性がある未知の数量の数値を抽出する場合は、SI-value プロシージャを使用できます。このプロシージャは、数量をその型の標準の SI 測定単位に変換し、double を返します。標準の SI 測定単位は、以下の型の任意の組み合わせです。
数量型SI 測定単位
Distancem
Massg
Times
Intensitycd
SI-value プロシージャの構文は次のとおりです。
{SI-value quantity}
quantity は、変換する数量オブジェクトです。有効な数量を指定します。quantity が有効な数量でない場合や、quantity が未知の数量の場合、SI-value は例外をスローします。このプロシージャは、対応する SI 測定単位で数量の値を格納している double を返します。ただし、このプロシージャは測定単位を返しません。次に例を示します。

例: 数量の SI-value の抽出
|| The following call returns the value of 3 feet
|| in the SI unit of measurement for distance (meters).
{value
    let my-quantity:Distance = 3feet
    {SI-value my-quantity}
}

|| The following call returns the value of 2 minutes
|| in the SI unit of measurement for time (seconds).
{value
    let my-quantity:Time = 2minutes
    {SI-value my-quantity}
}

数量と単位のテスト

Curl 言語には、数量と単位の以下の点をテストできるプロシージャが用意されています。

値が数量であるかどうかのテスト

scalar? プロシージャを使用すれば、式の値が数量であるかどうかを判別できます。scalar? プロシージャの構文は次のとおりです。
{scalar? expression}
expression は、テストする項目です。expression が数量または数値を表す場合、このプロシージャは true を返します。それ以外の場合は、false を返します。

例: scalar? の使用
|| A quantity
Is 3cm a scalar? ... {scalar? 3cm}

|| A numeric value
Is 3 a scalar? ... {scalar? 3}

|| A vector
Is the vector (0.3, 0.5) a scalar? ... {scalar? {Fraction2d 0.3, 0.5}}

値が単位なし数量であるかどうかのテスト

number? プロシージャを使用すれば、式の値が単位なし数量 (つまり、単なる数値) であるかどうかを判別できます。number? プロシージャの構文は次のとおりです。
{number? expression}
expression は、テストする項目です。expression が単位のない数値を表す場合、このプロシージャは true を返します。それ以外の場合は、false を返します。

例: number? の使用
|| A quantity
Is 3cm a number? ... {number? 3cm}

|| A numeric value
Is 3 a number? ... {number? 3}

|| A vector
Is the vector (0.3, 0.5) a number? ... {number? {Fraction2d 0.3, 0.5}}

内部実装

Curl 言語では、既知の単位を持つ数量は、プリミティブ データ型と同様に double または float として処理されます。数量を検出してもオブジェクトを作成する必要はないので、数量を使用すると、特に効率的です。