LSIC-86 なページ

LSIC-86 試食版はエル・エス・アイ ジャパン株式会社 が提供するフリーのCコンパイラです。
試食版といっても モデルサイズがスモールサイズに制限されているだけで、後は機能上の制限は全くありません。(太っ腹)


LSI C-86 Ver.3.30 試食版でモンテカルロシミュレーションにより円周率πを求めてみる



http://www.lsi-j.ab.psiweb.com/freesoft/index.html  から lsic330c.lzh を有難くダウンロードする。

C:にC:\LSIC86 というフォルダを作り、その中にlsic330c.lzhをコピーしてパス名を使って展開する。

例えばd:\tempdata\download\lsic\フォルダlsic330c.lzhをダウンロードしたとすると
MSDOSプロンプトから

C:\>cd \
C:\>c:\windows
c:\windows>c:
c:\windows>cd \
c:\>mkdir lsic86
c:\>cd lsic86
c:\lsic86>copy d:\tempdata\download\lsic\lsic330c.lzh .
    1 個のファイルをコピーしました。
c:\lsic86>lha x lsic330c.lzh
c:\lsic86\bin>notepad _lcc     ( lccじゃなくて、_lcc です。 本当はエディタ(秀丸とか)を使うべき。)


# LSI C-86 compiler's configuration file

-DLSI_C
-XA:\LSIC86\BIN -LA:\LSIC86\LIB -IA:\LSIC86\INCLUDE -T -O
-acdos.obj $LSICOPTS
& #Command line argument will be inserted here
-lknjlib -ldoslib -v

の記述で、A:\をC:\に変える
んでもって、どうせ数学的な処理しかしないんだったら  浮動小数点パッケージ(mathlib)は強制的につけちゃえ


# LSI C-86 compiler's configuration file

-DLSI_C
-XC:\LSIC86\BIN -LC:\LSIC86\LIB -IC:\LSIC86\INCLUDE -T -O
-acdos.obj $LSICOPTS
& #Command line argument will be inserted here
-lmathlib
-lknjlib -ldoslib -v


c:\lsic86\bin>notepad montepi.c
こんなのを書く

 

/*
** motepi.c
** monte carlo simulation for  LSI C-86 Ver.3.30 試食版
** http://www.lsi-j.co.jp/index.html
**
** 0〜1.00 の乱数を多数回発生させ、 x^2+y^2 <=1 つまり、円の内部に入る確率を計算し、
** それにより円周率を計算する。
** 一般的に、この様に多数回乱数を発生させてモデルの挙動を検討するのをモンテカルロシミュレーションと呼ぶ。
** モンテカルロというのは、その名の通り、ギャンブルで有名なモンテカルロのこと。
** ここでは nmax=10000 により、10000回繰り返してみる。 
*/


#include <stdio.h> 
#include <stdlib.h>
#include <math.h>
#include <time.h>

#define RANDMAX 32768.0
/* 乱数の最大値 rand()関数のマニュアル参照*/


main(){


    int i , n;
    int nmax=10000;
    float x,y,p;
    
    printf ("Monte Carlo\n");

    srand( time(NULL) % 32768 ); 
    /* 乱数の初期化。
    ** time(NULL)でシステムの秒数を得ているので、
    ** 続けてやっても同じ結果しか出ない(笑)
    */

    n=0;
    for (i=1 ; i<=nmax; i++){
            x=(float)rand()/RANDMAX;
            y=(float)rand()/RANDMAX;
            if (x * x + y * y < 1.0 ){
                    n++;
            }
    }
    printf("%d\n",n);
    p = (float)n / (float)nmax * 4.0;
    printf ("Monte Carlo (%d) PI=%f\n",nmax,p);
} 

コンパイルする
C:\lsic86\BIN>lcc motepi.c
lld @link.i

C:\lsic86\BIN>montepi

Monte Carlo
7851
Monte Carlo (10000) PI=3.140400


今度こそおしまい。疑問点は \lsic86\man\lsic86.man を読んで下さい。
一般のC言語に関することはCの本読んでください