/********************************************************************

人工知能パートナーシステム(AIPS)を支える

        デジタル回路の世界
            

     ( ISBN978-4-88359-339-2 )


*********************************************************************

著者名 萩原良昭 ( hagihara-yoshiaki@aiplab.com )

           http://www.aiplab.com/

*********************************************************************

発行所名 青山社  (info@seizansha.co.jp)

           http://www.seizansha.co.jp

**********************************************************************

Appendix(1-2-1)    

本書の pp.19-23 の補足資料です。

    ( 2017.12.29 作成 )

***********************************************************************








****************************************************************************

本書 ( p.20 ) の 図(1-2-1) は、私のご先祖さまの人数を図にしたものです。

****************************************************************************

 一世代 25 年として 100 年前には 16 人の祖祖母と祖祖父がいたことになります。

 200年前では ( 2 の 8 乗 ) = 16 x 16 = 256 人、

 300年前では ( 2 の 12 乗 ) = 16 x 16 x 16 = 4096 人、

400年前では ( 2 の 16 乗 ) = 16 x 16 x 16 x 16 = 65536 人 になります。

****************************************************************************

 400年前は徳川幕府が開かれた時代(1603年では、理論上、私のご先祖さまは、

  65536 人 になりますが、この数はまだもっともらしい人数に見えますが、

     800年前となると、鎌倉幕府が開かれた時代(1192年)となり、

  私のご先祖さまは、( 2 の 32 乗 ) = 42 9496 7296 人になりますが、

     私のご先祖さまが 42億人もいるわけはありません。。。

****************************************************************************

( p.20 参照 ) さらに、今から1600年前の古墳時代にもなると、

( 2 の 64 乗 ) = ( 42 9496 7296 ) の 2 乗

             = 1844 6744 0737 0955 1616 人になります。

****************************************************************************

         ( p.21 参照 ) 当用漢字の数をおおよそ、

            ( 2 の 12 乗) = 4096 として、

    2文字熟語なら、( 2 の 24 乗) = 1677 7216 にもなります。

    4文字熟語なら、( 2 の 48 乗) = 284 4749 6671 0656 にもなります。

****************************************************************************

ここで、A[ ]= 4096 と書き、A[4]=4,A[3]=0,A[2]=9,A[1]=6 を意味するとします。

そこでこれから、電卓では簡単に計算できない大きなけた数の数 A[ ] と B[ ] の

   たし算 C[ ] = A[ ] + B[ ] と かけ算 D[ ] = A[ ] x B[ ] を

   実行するデジタル回路 BigNumber( ) をこれから構築していきます。


まずは、このデジタル回路 BigNumber( ) の入出力関係をしっかりと定義します。

     { A[ ], B[ ] } BigNumber( ) --> { C[ ], D[ ] } ;


  この BigNumber( ) は、その計算 algorithm を定義した関数名でもあり、

 またそれに対応する C 言語の関数 ( function )の名前でもあります。

****************************************************************************


**************************************************************

大きな数のかけ算回路 a( ) = BigNumber( ) の入出力変数の定義

**************************************************************

This program a( ) computes C[ ] = A[ ] + B[ ]

with KA = { A[ ]のけた数 } and KB = { B[ ]のけた数 } ;


This program a( ) also computes D[ ] = A[ ] x B[ ]

with KC = { C[ ]のけた数 } and KD = { D[ ]のけた数 } ;

**************************************************************

A.txt = input data file

B.txt = output data file

[A.txt] a( ) --> [B.txt]

**************************************************************



/*************************************************************

大きな数のかけ算回路 a( ) = BigNumber( )

**************************************************************

このProgram ( a.c ) は 入力data file ( A.txt ) が必要です。

( a.c ) をcompileして自分のパソコンの環境で (a.exe)を生成してください。

[A.txt ] a( ) --> [B.txt]

*************************************************************

This program a( ) = [ a.c ] computes

C[ ] = A[ ] + B[ ] and D[ ] = A[ ] x B[ ]

with KA = { A[ ]のけた数 }、 KB = { B[ ]のけた数 }、

KC = { C[ ]のけた数 }、 and KD = { D[ ]のけた数 } ;

********************************************

A.txt = input data file

B.txt = output data file

[A.txt ] a( ) --> [B.txt]

a( ) = [ a.c ] は C-言語のsource program code です。

**************************************************
演習問題(1-2-1)
**************************************************

入力data file (A.txt) をいろいろ変えて

出力data file (B.txt) を生成してみましょう。

*******************************************************

●例1 本文 p.20 参照 2の16乗を計算します。 input file ( A1.txt ) output file( B1.txt )

●例2 本文 p.20 参照 2の32乗を計算します。 input file ( A2.txt ) output file( B2.txt)

●例3 本文 p.20参照 2の64乗を計算します。 input file ( A3.txt ) output file( B3.txt )

●例4 本文 p.21参照 2の12乗を計算します。 input file ( A4.txt ) output file( B4.txt )

●例5 本文 p.21参照 2の24乗を計算します。 input file ( A5.txt ) output file( B5.txt )

●例6 本文 p.21参照 2の48乗を計算します。input file ( A6.txt ) output file( B6.txt )

●例7 本文 p.23参照 2の128乗を計算します。 input file ( A7.txt ) output file( B7.txt )

●例8 本文 p.26参照 大きな数の計算例です。 input file ( A8.txt ) output file( B8.txt)



************************************************************************

このProgram ( a.c ) は A[ ], と B[ ] のけた数が ~100程度までしか有効でありません。
 
    1000けたでも100万けたでも有効となるようにProgramを拡張してください。

また計算できても、どう表示し見るかも工夫が必要となります。

任意のけた番号の、実際の数字の値をどうすれば簡単に表記できるかも工夫してください。


**************************************************************************