Go to the first, previous, next, last section, table of contents.


データ型式実習

Calc は単純な数だけでなくいろいろなデータ型式を理解します。 本節では、これらの型式を一つずつ順番に試していきます。

分数

これまで使ってきたのは主として 整数(integers)浮動小数(floats) でした。 浮動小数は通常は実数概念の良い近似ですが、 単なる近似であって丸め誤差の危険性もあると判りました。 Calc は分数(fractions) もサポートしていて、 どんな有理数をも厳密に表現します。

1:  3628800    2:  3628800    1:  518400:7   1:  518414:7   1:  7:518414
    .          1:  49             .              .              .
                   .

    10 !           49 RET         :              2 +            &

: コマンドは2つの整数の除算を行い分数を得ます。 / は普通、整数どうしの除算を行うと浮動小数点の結果を得ます。 ちなみに 49: の間に RET を打たねばなりませんでした。 そうしないと : が 49 で始まる分数の一部と解釈されてしまうからです。

浮動小数と分数は c fc F で相互に変換できます。

1:  1.35027217629e-5    1:  7:518414
    .                       .

    c f                     c F

c F コマンドは浮動小数を、 現行精度の範囲で等しい「最も簡単な」分数で置換えます。

1:  3.14159265359   1:  1146408:364913   1:  3.1416   1:  355:113
    .                   .                    .            .

    P                   c F      DEL       p 5 RET P      c F

(*) 練習問題 1. ある計算結果は 1.26508260337 でした。 あなたはこれを π と有理数の積のルートであろうと推定しました。 本当でしょうか ? (丸め誤差は許容してください!) データ型式 練習問題 1 解答「(π × 有理数) の平方根」 参照 . (*)

複素数

複素数(Complex numbers) は直交座標形式でも極座標形式でもストアできます。

1:  -9     1:  (0, 3)    1:  (3; 90.)   1:  (6; 90.)   1:  (2.4495; 45.)
    .          .             .              .              .

    9 n        Q             c p            2 *            Q

-9 の平方根は、デフォルトでは直交形式(0 + 3i)で表現されますが、 極座標形式(絶対値 3; 位相角 90度)にも変換できます。 通常算術演算と科学演算は全て両方の形式に対応しています。

無限大

もう一つの一般化された数は無限大(infinity)です。 無限大は実際の数値ではありませんが、しばしば同様に扱うことができます。 Calc は正の無限大(つまり、どんな実数よりも大きい数)を表現するために、 記号 inf を使います。 負の無限大(どんな実数よりも小さい数)は当然 `-inf' と書けます。 inf という言葉は代数的入力方式でしか入力できません。

2:  inf        2:  -inf       2:  -inf       2:  -inf       1:  nan
1:  -17        1:  -inf       1:  -inf       1:  inf            .
    .              .              .              .

' inf RET 17 n     *  RET         72 +           A              +

無限大は無限に大きいので、 (-17 のような)有限の数を掛けてもその正負符号以外には影響せず、 正の無限大が負の無限大になるだけです。 (「巨大正数に -17 を掛けると巨大負数になる。」) 無限大に有限数を足しても無限大のままです。 絶対値を取ると正の無限大になります。 最後に、この正の無限大を先ほどの負の無限大に加算しました。 ここで -72 という答を予想した人がいるかもしれません。 しかし 72 は無限大のかなたに完全に失われました。 `inf - inf' を計算するまでに、 それらの間にある有限の差があったとしても検出不可能です。 そこで私達は結果が 「不定(indeterminate)である」とします。 Calc はこれを記号 nan (Not A Number の略)で表します。

普通ゼロで割るとエラーとして扱われますが、 m i と押して「無限大モード(infinite mode)」を起動することで Calc に無限大を使って答えさせることができます。

3:  nan        2:  nan        2:  nan        2:  nan        1:  nan
2:  1          1:  1 / 0      1:  uinf       1:  uinf           .
1:  0              .              .              .
    .

  1 RET 0          /       m i    U /            17 n *         +

ゼロ除算は通常は評価されずに残されますが、 m i から後はそれに代えて無限大の結果を返します。 実際の答は uinf、 つまり「undirected infinity(向き不明の無限大)」となります。 1 / x のグラフの x = 0 周辺の部分をみると、 x 軸の上から近づいたら正の無限大に、 下から近づけば負の無限大に向かっていくことが判ります。 単に 1 / 0 としか入力しなかったので、 Calc は結果が無限大であることは判るがその正負は判らないのです。 それが uinf の意味するところです。 ちなみに、uinf に負数を掛けてもただの uinf のままです。 とにかく uinf の正負が判らないのですから、 -uinf と言ってみても無意味です。 最後に、uinfnan に加算したら nan になりました。 この理由は簡単で、nan は「全く不明」を意味するのに対して uinf は「正負は不明だが無限大ということは判っている」を意味し、 不明さにおいてまさる nan は、 uinf やその他何を相手に演算されようが勝ち残るからです。

(*) 練習問題 2. 下記の数式群のそれぞれについて、 Calc が何と答えるか予想しなさい。 `inf / inf', `exp(inf)', `exp(-inf)', `sqrt(-inf)', `sqrt(uinf)', `abs(uinf)', `ln(0)'. データ型式 練習問題 2 解答「無限大のいろいろ」 参照 . (*)

(*) 練習問題 3. `inf - inf = nan' となって、 nan は不定を表すことが判りました。 nan は複素数であり得るでしょうか ? また、無限大であり得るでしょうか ? データ型式 練習問題 3 解答「"nan"はどんな値を取り得るか?」 参照 . (*)

時分秒型式

時分秒型式(HMS forms) は、時間, 分, 秒というような量を表現します。

1:  2@ 30' 0"     1:  3@ 30' 0"     2:  3@ 30' 0"     1:  2.
    .                 .             1:  1@ 45' 0."        .
                                        .

  2@ 30' RET          1 +               RET 2 /           /

時分秒型式は角度における度, 分, 秒 にも使えます。

1:  0.5        1:  26.56505   1:  26@ 33' 54.18"    1:  0.44721
    .              .              .                     .

    0.5            I T            c h                   S

まず 0.5 の逆タンジェントを度分秒型式に変換し、その角度のサインを取りました。 Calc の三角関数群は時分秒型式を直接入力として許容することに注目ください。

(*) 練習問題 4. ビートルズの Abbey Road は 47分 26秒で 17曲入っています。 Abbey Road の1曲あたりの平均時間はいくらでしょうか ? もし延長ディスコ版 Abbey Road が各曲あたり 20秒 追加したら、 アルバム全体では何分になるでしょう ? データ型式 練習問題 4 解答「アビィロード」 参照 . (*)

日付型式

日付型式 は日付や、日付と時刻を表現します。 日付は代数的入力方式で入力しなければなりません。 日付型式は `< >' 記号で囲まれます。 標準的な日付表現はたいてい認識できます。

2:  <Sun Jan 13, 1991>                    1:  2.25
1:  <6:00pm Thu Jan 10, 1991>                 .
    .

' <13 Jan 1991>, <1/10/91, 6pm> RET           -

この例では、2つの日付を入力して差を取り、 それらが何日開いているかを調べます。 日付型式に時分秒や日数を追加して別の日付型式にすることも可能です。

1:  <4:45:59pm Mon Jan 14, 1991>     1:  <2:50:59am Thu Jan 17, 1991>
    .                                    .

    t N                                  2 + 10@ 5' +

t N ("now") コマンドは現在の日時をスタックに push します。 それからその日時に 2日と 10時間 5分を加えます。 この他の日時関連コマンド群には次のようなものがあります。

`t J'
ユリウス暦に変換(Julian day conversions)
`t W'
その日付を含む週の初日を返す
`t I'
月単位でのインクリメント

詳しくはDate Arithmetic 参照 .

(*) 練習問題 5. 次の13日の金曜日は何日後でしょう ? データ型式 練習問題 5 解答「13日の金曜日」 参照 . (*)

(*) 練習問題 6. 今年から西暦 10001年までに、 うるう年は何回あるでしょう ? データ型式 練習問題 6 解答「うるう年」 参照 . (*)

誤差型式

誤差型式(error form) は、 平均値とそれに付加された標準偏差あるいは推定誤差を表します。 約30m(推定誤差 1m) 離れたところに 高さ約8m(推定誤差 0.2m)の電柱が立っているとします。 ここから電柱の頂点に引いた直線の傾きはいくらで、角度は何度でしょうか ?

1:  8 +/- 0.2    2:  8 +/- 0.2   1:  0.266 +/- 0.011   1:  14.93 +/- 0.594
    .            1:  30 +/- 1        .                     .
                     .

    8 p .2 RET       30 p 1          /                     I T

つまり角度は約15°で、元の推定誤差が標準偏差とした場合は、 約60% の確率で誤差 0.59°の範囲に収まります。

(*) 練習問題 7. トーラス(ドーナツ型)の体積は 2 π^2 R r^2 で求められます。 ただし R はチューブの中心で定義された輪の半径、 r はチューブ自身の半径です。 R が 20cm で r が 4cm 、それぞれの精度は 5% としましょう。 体積とその相対誤差はいくらでしょうか ? データ型式 練習問題 7 解答「誤差のドーナツ」 参照 . (*)

区間型式

区間型式(interval form) は値の範囲を表現します。 誤差型式が統計的推定にふさわしいのに対して、 区間は厳密な境界を示します。 先ほどの電柱までの距離は間違いなく 28 〜 31m の間で、 高さは 7.7 〜 8.1 m の範囲内としましょう。

1:  [7.7 .. 8.1]  2:  [7.7 .. 8.1]  1:  [0.24 .. 0.28]  1:  [13.9 .. 16.1]
    .             1:  [28 .. 31]        .                   .
                      .

  [ 7.7 .. 8.1 ]    [ 28 .. 31 ]        /                   I T

最初の範囲が正しければ、電柱頂点への仰角はご覧の範囲内にあります。

区間の両側のカギカッコは、範囲の両端が許される事を示します。 言換えれば、電柱までの距離は 28 と 31 を含むその範囲内にあります。 カギカッコに替えてカッコを使うと、両端を含まない区間になります。 片側を含み(閉じた)、もう一方の片側を含まない(開いた)区間を作ることもできます。

1:  [1 .. 10)    1:  (0.1 .. 1]   2:  (0.1 .. 1]   1:  (0.2 .. 3)
    .                .            1:  [2 .. 3)         .
                                      .

  [ 1 .. 10 )        &              [ 2 .. 3 )         *

区間のどちらの端が開いていて、どちらの端が閉じているべきかを見失わないように、 Calc は自動的に追跡します。 `-inf'`inf' を片側あるいは両端に用いて、 無限区間や半無限区間を作ることもできます。

(*) 練習問題 8. `1 / (0 .. 10)' の答を 推定しなさい。 `1 / (-10 .. 0)' ではどうでしょうか ? `1 / [0 .. 10]' (区間がゼロを含む)ではどうでしょうか ? `1 / (-10 .. 10)' ではどうでしょうか ? データ型式 練習問題 8 解答「区間で割り算」 参照 . (*)

(*) 練習問題 9. 数を二乗する簡単な 2つの方法は RET *2 ^ です。通常これらは同じ答を生成します。 この事実は区間型式でも成立すると思いますか ? もし違うなら、どちらの結果がより大きな区間になるでしょう ? データ型式 練習問題 9 解答「区間を二乗する」 参照 . (*)

剰余型式

剰余型式(modulo form) は剰余算 M のために用いられます。 例えば、時間の計算では一般に 12 時間や 24 時間の剰余が計算されます。

1:  17 mod 24    1:  3 mod 24     1:  21 mod 24    1:  9 mod 24
    .                .                .                .

    17 M 24 RET      10 +             n                5 /

最後のステップで、 Calc は 5 を掛けると元の 21 mod 24 となる新しい数を見つけました。 M が素数ならこのような数を見つけることは常に可能です。 24 のように非素数の M については、時々しか可能ではありません。

1:  10 mod 24    1:  16 mod 24    1:  1000000...   1:  16
    .                .                .                .

    10 M 24 RET      100 ^            10 RET 100 ^     24 %

上の 2つの計算は同じ答に到達しますが、 前者のほうが後者で発生する巨大な中間結果を回避するのでずっと効率的です。

(*) 練習問題 10. フェルマー(Pierre de Fermat) の 小定理によれば、 n が素数で、かつ xn より小さな自然数なら x^(n-1) mod n = 1 です。 もし n が素数で ない 場合、 この式は多くの x についてとなります。 従ってある数が素数かどうかは、 この式がいくつかの x に対して成立するかどうか試すことで 略式にテストできます。 このテストを使って、次の数が素数かどうか調べなさい。 811749613, 15485863. データ型式 練習問題 10 解答「フェルマーの素数テスト」 参照 . (*)

誤差型式, 区間型式, 剰余型式, 極座標表現(複素数)の位相部の一部として 時分秒型式が使用可能です。 例えば、calc-time コマンドは現在時刻を時分秒/剰余型式でスタックに push します。

1:  17@ 34' 45" mod 24@ 0' 0"     1:  6@ 22' 15" mod 24@ 0' 0"
    .                                 .

    x time RET                        n

この計算で、午前零時まであと 6時間22分であることが判ります。

(*) 練習問題 11. 大雑把に言って、1 年は約 pi * 10^7 秒です。 たった今からその秒数後は何時でしょう ? データ型式 練習問題 11 解答「π × 10^7 秒」 参照 . (*)

(*) 練習問題 12. 延長ディスコ版 Abbey Road の CD 発売のために包装材を注文する準備をしています。 各楽曲はオリジナルより 20 〜 60 秒 長くなると言われました。 CD 1枚の容量は約75分です。 1枚組み包装を注文すべきでしょうか ? それとも 2枚組みにすべきでしょうか ? データ型式 練習問題 12 解答「CD 版 アビィロード」 参照 . (*)

単位

他に Calc が扱えるデータは 単位を伴う数です。 これは厳密に言えば新たなデータ型ではなく単なる代数的表現の応用であって、 `cm'`in' のような それらしい名前の変数を使ってセンチメートルやインチを表します。

1:  2 in        1:  5.08 cm      1:  0.027778 fath   1:  0.0508 m
    .               .                .                   .

    ' 2in RET       u c cm RET       u c fath RET        u b

「2 inches」という量 (実のところは 2 と 変数 `in' の積を代数的に表現したもの) を入力し、それをセンチメートルに変換し、次に尋(ひろ)に変換して、 最後に「基本」単位(この場合はメートル)に変換しました。

1:  9 acre     1:  3 sqrt(acre)   1:  190.84 m   1:  190.84 m + 30 cm
    .              .                  .              .

 ' 9 acre RET      Q                  u s            ' $+30 cm RET

1:  191.14 m     1:  36536.3046 m^2    1:  365363046 cm^2
    .                .                     .

    u s              2 ^                   u c cgs

単位表現は実のところ単なる式なので、 変数 `acre' の平方根を取ることは定義されていません。 (訳注: `acre'(エーカー)は面積の単位) acre はいつか値を割り当てられる変数かも知れないのです。 「units-simplify」コマンドを使うと、変数を単位として解釈し表現を簡単化します。

最後のステップで、特定の単位名ではなく単位系に変換しました。 「cgs」単位系は長さの標準単位にメートルでなくセンチメートルを使います。

Calc には多種多様な単位が定義されています。

1:  55 mph     1:  88.5139 kph   1:   88.5139 km / hr   1:  8.201407e-8 c
    .              .                  .                     .

 ' 55 mph RET      u c kph RET        u c km/hr RET         u c c RET

ある速度をまず miles per hour で表現し、次に kilometers per hour で、 さらに kph をもう少し明示的な表記で表現し、最後に光速との比で表現しました。

温度の変換はもう少し注意が必要です。 「華氏20度」の解釈には 2通りあり、 それが実際の温度を意味する場合と温度差を意味する場合があります。 普通の単位ならそれに何の違いもありませんが、 温度単位には比例係数と共にゼロ点の違いがありますから、 2種類の明示的なコマンドが必要になります。

1:  20 degF       1:  11.1111 degC     1:  -20:3 degC    1:  -6.666 degC
    .                 .                    .                 .

  ' 20 degF RET       u c degC RET         U u t degC RET    c f

最初に、華氏 20°の温度差を同等の摂氏の温度差に変換しました。 次に実際の温度である華氏 20°を摂氏に変換しました。 これは厳密な分数として答えるので、 他の結果と比較しやすいように浮動小数に変換しました。

単純な単位変換は、ただ数値のみをスタックに置いて実行できます。 すると u cu t は、 プロンプトを出して旧単位と新単位を聞いてきます。 この方法では、どの数値がどの単位か覚えておくのはあなたの責任です。

1:  55         1:  88.5139              1:  8.201407e-8
    .              .                        .

    55             u c mph RET kph RET      u c km/hr RET c RET

組込まれた単位の完全なリストを見るには u v とタイプしてください。 単位表を見終わって Calc に戻るには、 もう一度 M-# c とタイプしてください。

(*) 練習問題 13. 1 年は実際は何秒ですか ? データ型式 練習問題 13 解答「π × 10^7 秒なんかじゃない」 参照 . (*)

(*) 練習問題 14. スーパーコンピューターの設計の限界は 光の速度(及びほぼ光速と同じ電気信号の速度)です。 あるコンピューターのクロック周期が 4.1 ns (ナノ秒)で、 ケースが 1 m 角としましょう。 この設計で、光速は重大な問題になるでしょうか ? データ型式 練習問題 14 解答「スーパーコンピューターと光速」 参照 . (*)

(*) 練習問題 15. ナメクジのサムは 1 時間に約 5 ヤード 移動します。彼は「加速剤」を手に入れました。 「加速剤」1 錠でスピードが2倍になります。 合衆国のハイウェイを合法的に走るには、何錠飲めば良いでしょう ? データ型式 練習問題 15 解答「ナメクジのサム」 参照 . (*)


Go to the first, previous, next, last section, table of contents.     利用度数