####################################################################################################

  - RINPn ( RINEARN Processor nano ) ReadMe -

  この度はRINPn をご利用下さいまして有難うございます。
  この文書は必ず最後までお読み下さいますようお願い申し上げます。

  なお、より読みやすい形のユーザーガイドが「 RINPn_ユーザーガイド.html 」として同梱されています。
  Webブラウザが利用できる環境では、そちらも併せてご覧ください。

####################################################################################################

RINPn (発音：りんぷん) は、オープンソース開発の、シンプルでコンパクトなプログラム関数電卓です。
全てJava(R)言語で実装されており、各種デスクトップ用OS上で使用できます。

      公式サイト： https://www.rinearn.com/ja-jp/rinpn/
      リポジトリ:  https://github.com/RINEARN/rinpn
      ご連絡先：   https://www.rinearn.com/ja-jp/contact/


****************************************************************************************************
* 目次
****************************************************************************************************

  ・使用許諾契約書（ライセンス）について
  ・ご使用前にZIPファイルを展開（解凍）してください & 文字化けする場合の対処

    ・Microsoft(R) Windows(R) をご使用の場合の展開方法
    ・Linux(R) 等、その他のOSをご使用の場合の展開方法

  ・起動方法（GUIモード）

    ・Microsoft Windows をご使用の場合の起動方法
    ・Linux等、その他のOSをご使用の場合の起動方法

  ・起動後の使用方法

    ・計算方法
    ・スクリプトの実行方法
    ・設定の変更
    ・スクリプトによる変数や関数の定義（ライブラリスクリプトの作成）
    ・Java言語での組み込み変数/関数の実装（プラグインの開発）

  ・コマンドラインでの使用方法（CUIモード）

  ・組み込み関数/変数 一覧

  ・計算処理の仕様や注意点などについて

    ・内部では、数値が2進数ベースの浮動小数点数で扱われるため、それに起因する小さい誤差があります
    ・精度（桁数）や丸め処理

  ・ソースコードやリポジトリなど
  ・お問合せは御気軽に
  ・商標などについて


****************************************************************************************************
* 使用許諾契約書（ライセンス）について
****************************************************************************************************

  RINPn はオープンソースのソフトウェアであり、MITライセンスの下でリリースされています。
  ご使用の前に、同梱のライセンス文書（「License」フォルダ内の「MIT_License.txt」）
  を必ずお読みください。ライセンス文書における全ての条項および条件にご同意いただけない場合は、
  申し訳ございませんが、このソフトウェア（RINPn）をご使用いただけません。何卒ご了承ください。

  ※ MITライセンスの内容になじみの無い方は、原文は英語で記述されていますので、
     まずは「 MITライセンス 内容 」などで検索すると、把握の助けになるページが見つかるかもしれません。
     起動して普通に使う分には自由に使えます（無償）。ただし、開発元は一切の責任を負担しない事に同意が必要です。

  ※ なお、このソフトウェアの起動時に、Java(R)の実行環境（JRE）を「jre」フォルダ内にダウンロードして
     使用するよう選択できますが、そのJREのライセンスは「クラスパス例外条項付きの GNU GPL version 2」です。
     ( https://openjdk.java.net/legal/gplv2+ce.html )
     このソフトウェアは、クラスパス例外条項の範囲内で上記のJREを使用します。

  ※ 上記JREは、使用については商用・非商用問わず自由に使用できますが、再配布には上記ライセンスの条件が付いています。
     もし「jre」フォルダ内に、ダウンロード済みJRE（「openjdk-w64-jre-...」で始まる名前のフォルダと、同名ZIPファイル ）
     を含んだまま、このソフトウェアを再配布したい場合は、上記GPL v2ライセンスのバイナリ再配布時の条件にご注意ください。
     特に必要が無い場合や、よく分からない場合は、上記JREを削除してから再配布するのが無難です。


****************************************************************************************************
* ご使用前にZIPファイルを展開（解凍）してください & 文字化けする場合の対処
****************************************************************************************************

  ダウンロードしたままの状態の配布ファイルは、ZIP形式（拡張子「.zip」）で圧縮されています。
  最初に展開（解凍）してからご使用ください。展開しないと、上手く動作しない場合がございます。

  ※ もし、ZIP形式ファイルをそのままダブルクリックして中身（このファイルなど）を表示している場合、
     それは一時的に開かれているだけなので、ソフトウェアを起動できる形に正しく展開されていません。


- Microsoft(R) Windows(R) をご使用の場合の展開方法 -

 【重要】最初に、ダウンロードしたZIPファイルを右クリックして「プロパティ」を選択し、
  プロパティの画面の下にあるセキュリティ項目の「許可する」にチェックを入れて、「OK」で閉じてください。
  (これを行わないと、展開時やソフト起動時に、警告メッセージが表示されて失敗する場合があります。)

  その後、再びZIPファイルを右クリックし、「すべて展開」や「ここに展開」などを選ぶと展開できます。
  展開すると、ZIPファイルと同じ名前のフォルダができますので、以後はその中のものをご使用ください。


- Linux(R) 等、その他のOSをご使用の場合の展開方法 -

  同様に右クリックメニューから展開可能ですが、ファイル名の中の日本語が文字化けしてしまう場合は、
  コマンドラインでZIPファイルのある場所まで移動した上で、以下のようにunzipで展開してみてください：

      unzip -O cp932 rinpn_???.zip       (???の箇所にはバージョンの表記等が入ります)


****************************************************************************************************
* 起動方法（GUIモード）
****************************************************************************************************

- Microsoft Windows をご使用の場合の起動方法 -

    上で展開したフォルダ内にある、
    「 RINPn.bat（種類:バッチファイル）」をダブルクリックすると起動します。


    [ ※ Java実行環境（JRE）について ]

    なお、このソフトウェアの実行にはJavaの実行環境（JRE）が必要ですが、もしご利用の環境にJREが無い場合、
    ダウンロードして使用するかどうか、起動時に尋ねられます。

    同意すると、RINEARN公式サイトの「 https://download.rinearn.com/jre/ 」から、
    JREが「jre」フォルダ内にダウンロードされて使用されます。

    このJREはOpenJDKの「jlink」ツールによって生成されたもので、権利元やライセンス等は以下の通りです：

        著作権者：   Oracle Corporation and/or its affiliates 
        ライセンス： いわゆるクラスパス例外条項付きの GNU GPL version 2 (https://openjdk.java.net/legal/gplv2+ce.html)
        OpenJDKの公式サイト： https://openjdk.java.net/

    ※ 詳細は、「jre」フォルダ内の文書や、ダウンロードしたJREに同梱されている文書をご参照ください。


- Linux等、その他のOSをご使用の場合の起動方法 -

    JARファイル RINPn.jar を、以下のようにコマンドラインからjavaコマンドで起動します：

        cd 展開したフォルダ
        java -jar RINPn.jar

    メモリー使用量を指定したい場合は、以下の例のように -Xmx オプションを付けて実行します：

        java -Xmx512m -jar RINPn.jar     (512MB使用する場合)


    [ ※ Java実行環境（JRE）について ]

    なお、このソフトウェアの実行にはJavaの実行環境（JRE）が必要です。
    ご使用の環境にJREが無いと、起動時に java コマンドに関するエラーメッセージが出ます。
    その場合、OSの種類や環境にもよりますが、apt コマンドが使える場合はコマンドライン端末上で：

        apt search jre      (または apt の代わりに apt-cache)

    で入手可能なものの一覧を確認した上で、

        sudo apt install default-jre        (または apt の代わりに apt-get)
    や
        sudo apt install openjdk-?-jre      (?の箇所にはバージョンの数字が入ります)

    などでJREを比較的簡単に導入できるかもしれません。
    他のものでも構いませんが、RINPn が動作しないものもあります。
    （※末尾に -headless が付いているものでは動作しないので、付けないようご注意ください）


****************************************************************************************************
* 起動後の使用方法
****************************************************************************************************

- 計算方法

    「 INPUT 」の下にある入力欄に計算式を入力し、そのままエンターキーを押してください。
    すると、「 OUTPUT 」の下にある欄に計算結果が表示されます。

    計算式は、「 1 + 2 - (3 + 4) / 5 」のように全体を入力でき、カッコ ( ) で計算順序を指定できます。
    また、「 ( 1 + 2 * f(3) ) / g(1.23) 」のように関数（ Library.vnano 内で定義）も使用できます。

    計算式でよく使う基本的な演算子（計算の記号）は以下の通りです：

      + ... 加算（足し算） 
      - ... 減算（引き算） 
      * ... 乗算（かけ算） 
      / ... 除算（割り算） 
      / ... 剰余（余りを求める） 

    なお、手計算と同様に、かけ算と割り算は、足し算と引き算よりも先に計算されます。
    足し算と引き算を先に計算したい場合は、その箇所をカッコ ( ) で囲ってください。

    ※ 計算における、数値の精度や誤差などについては、
       後述の「 計算処理の仕様や注意点などについて 」をご参照ください。


- スクリプトの実行方法

    計算式の代わりに、スクリプトを実行する事もできます。

    スクリプトの内容は、C系の文法を持つ簡易プログラミング言語「 Vnano (VCSSL nano) 」で記述します。
    一般のテキストエディタでコードを記述し、拡張子「 .vnano 」を付けたファイル名で保存してください。
    Vnano の文法等については以下をご参照ください：  https://github.com/RINEARN/vnano

    実行するには、RINPn の「 ▼INPUT 」の下にある入力欄にファイル名（例:「 Example.vnano 」）を入力し、
    そのままエンターキーを押してください。
    スクリプトファイルが RINPn とは別のフォルダ内にある場合は、その絶対パスを入力してください。


- 設定の変更

    ファイル「 Setting.vnano 」が、各種設定パラメータの値を指定するスクリプトになっています。
    一般のテキストエディタで開いて編集する事で、各種の挙動や画面デザイン等をカスタマイズできます。


- スクリプトによる変数や関数の定義（ライブラリスクリプトの作成）

   「lib」フォルダの中にあるスクリプトファイル「 ExampleLibrary.vnano 」内で、
    計算式内から使用可能な変数や関数を定義できます。
    一般のテキストエディタで開き、中に自由にコードを記述して、上書き保存してください。

    このような役割のスクリプトをライブラリスクリプトと呼びます。
    必要に応じて、別の新しいライブラリスクリプトのファイルを作成し、その中で変数や関数を定義する事もできます。 
    新しいライブラリスクリプトファイルを作成/追加した際は、そのファイルパスを、
   「 lib 」フォルダ内にあるテキストファイル「 VnanoLibraryList.txt 」内で読み込み指定してください。

    ※ なお、標準設定では、RINPn の電卓画面に入力された計算式内の数値は、
       整数も含めて、全て float 型（ただし64-bit精度、いわゆる double）と見なされます。
       これは、電卓画面上で入力する計算で、整数同士の割り算の結果が整数になってしまうのを防ぐためです。

       そのため、ライブラリで定義する関数の中で、電卓画面上の計算式から直接呼び出したい関数では、
       引数の型を float 型で宣言しておく必要があります。

    ※ 数字が全て float 型と見なされるのは、あくまでも電卓画面に入力した式の中だけの特例措置で、
       ライブラリ内に書いた式などには適用されません。後者では、普通に整数は int 型になります。


- Java言語での組み込み変数/関数の実装（プラグインの開発）

    変数や関数をJava言語で実装する事もできます。ただし、別途Java言語の開発環境（JDK）が必要です。

    このソフトでは、変数や関数を追加するためのJavaのプログラムをプラグインと呼びます。
    プラグインのサンプルとして、「 plugin 」フォルダ内の「 ExamplePlugin.java 」が同梱されています。
    その内容の通り、Java言語で普通に書いたフィールド/メソッドを、計算式やスクリプトから使用できます。
    コンパイルは、コマンドライン端末から以下の通りに行います：

        cd <pluginフォルダ>
        javac -classpath ".;../Vnano.jar" -encoding UTF-8 ExamplePlugin.java   (Microsoft Windows をご使用の場合)
        javac -classpath ".:../Vnano.jar" -encoding UTF-8 ExamplePlugin.java   (その他のOSをご使用の場合)

        ( ※ 上の2行は、-classpath 後の "..." 内の区切り文字が「 ; 」か「 : 」かが異なります )

    新しいプラグインのソースファイルを追加した際は、上記の要領でそのファイルをコンパイルした上で、
   「 plugin 」フォルダ内にあるテキストファイル「 VnanoPluginList.txt 」内で読み込み指定してください。


****************************************************************************************************
* コマンドラインでの使用方法（CUIモード）
****************************************************************************************************

  CUIモードでは、コマンドライン端末上で、電卓画面を起動せずにその場で計算を行う事ができます。

  CUIモードを使用するには、まず「 cmd 」フォルダのパスを、OSの環境変数「 PATH 」（または「 Path 」）
  に登録してください。方法についてはOSの種類によって異なるため、「 <OSの名前> PATH 設定 」などの
  キーワードでWeb検索してみてください。

  パスを設定すると、コマンドライン端末のどこからでも（カレントディレクトリを問わず）、
  以下のように簡単なコマンドでRINPn を起動できるようになります：

        rinpn

  上のように rinpn コマンドだけを入力すると、先の節でも扱った電卓画面が起動します（GUIモード）。
  それに対して、rinpn コマンドの引数に、以下のように計算式を「 " 」で囲って渡すと：

        rinpn "1 + 2 - (3 + 4) / 5"

  この場合は電卓画面は立ち上がらずに、そのままコマンドライン端末に計算結果が出力されます。
  このモードをCUIモードと呼びます。CUIモードは非常にシンプルですが、GUIモードと同様に全ての機能を
  利用できます。例えば、CUIモードでも、ライブラリに定義した関数や変数などを普通に使用可能です。

  また、以下のようにVnano で記述されたスクリプトファイルも実行できます：

        rinpn "Example.vnano"

  実行するスクリプトファイルが別のフォルダ内にある場合は、相対パスまたは絶対パスで指定してください。


****************************************************************************************************
* 組み込み関数/変数 一覧
****************************************************************************************************

  この電卓ソフトウェアでは、以下の関数および変数が標準で利用できます。

  * rad( degree )

    度からラジアンへの変換関数です。例：

        rad( 180.0 )

  * deg( radian )

    ラジアンから度への変換関数です。例：

        deg( 2.0 * PI )

  * sin( x )

    正弦関数です。引数 x の単位はラジアンです。例：

        sin( PI / 2.0 )

  * cos( x )

    余弦関数です。引数 x の単位はラジアンです。例：

        cos( 2.0 * PI )

  * tan( x )

    正接関数です。引数 x の単位はラジアンです。例：

        tan( PI / 4.0 )

  * sqrt( x )

    平方根を求める関数です。例：

        sqrt( 4.0 )

  * ln( x )

    自然数 e を底とする対数関数です。例：

        ln( 10.0 )

  * log10( x )

    10 を底とする対数関数です。例：

        log10( 1000.0 )

  * pow( x, exponent )

    x の exponent 乗を求める関数です。例：

        pow( 2.0, 3.0 )

  * exp( exponent )

    自然数 e の exponent 乗を求める関数です。例：

        exp( 1.2 )

  * abs( x )

    絶対値関数です。例：

        abs( -1.23 )

  * sum( ... )

    和を求める関数です。例：

        sum( 1.23 ,   4.56 ,   7.89 )

  * mean( ... )

    平均値（算術平均）を求める関数です。例：

        mean( 1.23 ,   4.56 ,   7.89 )

  * van( ... )

    分散（ 分母： n ）を求める関数です。例：

        van( 1.23 ,   4.56 ,   7.89 )

  * van1( ... )

    分散（ 分母： n-1 ）を求める関数です。例：

        van1( 1.23 ,   4.56 ,   7.89 )

  * sdn( ... )

    標準偏差（ 分母： n ）を求める関数です。例：

        sdn( 1.23 ,   4.56 ,   7.89 )

  * sdn1( ... )

    標準偏差（ 分母： n-1 ）を求める関数です。例：

        sdn1( 1.23 ,   4.56 ,   7.89 )

  * length( array, dim )

    (スクリプト用) 配列 array における、dim 番目の次元の要素数を返す関数です。例: 

        length( array, 0 );

  * output( ... )

    (スクリプト用) 指定した内容を、丸めた上で「 OUTPUT 」テキストフィールドに表示します。例: 

        output( 1.23 );

  * print( ... )

    (スクリプト用) 指定した内容を、複数行のテキストを表示可能な形で表示します。例：

        print( 1.23 );

  * println( ... )

    (スクリプト用) print関数に自動改行機能が付いたものです。例：

        println( 1.23 );

  * PI

    円周率 π の値を保持する変数（定数）です。値：

        3.141592653589793

  その他、Vnano の標準プラグインの各機能が使用可能です。
  上記の関数/変数も、標準プラグインが提供しているものです。
  全機能の一覧と詳細については、下記ページをご参照ください：

    https://www.vcssl.org/ja-jp/vnano/plugin/


****************************************************************************************************
* 計算処理の仕様や注意点などについて
****************************************************************************************************

- 内部では、数値が2進数ベースの浮動小数点数で扱われるため、それに起因する小さい誤差があります

  RINPn に入力した式が計算される際、
  内部処理において、数値データは2進数表現の倍精度浮動小数点数として扱われます。

  そのため、プログラミングで float 型や double 型を使用する場合と同じように、数値の精度限界桁付近
  （大抵は小数点以下で十数桁あたりの小さい領域）に誤差が生じる事をあらかじめ留意する必要があります。

  この誤差の原因はいくつかありますが、10進数と2進数との間での小数の相互変換に起因する誤差や、
  無限に続く数（例： 0.333...）を有限の桁数で打ち切って扱う事に起因する誤差なのが代表的です。
  前者の具体的な例としては、

    0.1 * 3.0

  を計算すると、内部処理での計算結果の値は：

    0.30000000000000004 

  の通り、本来の値である「 0.3 」から、わずかにずれた値になります。

  実際には、値は画面に表示する際に10桁程度（設定依存）に丸められるため、
  大抵の用途では、このような誤差は表面化しません。
  ただし、内部でこのような誤差があるという事は認識した上でご使用ください。
  小数点以下で十数桁あたりに出るような小さい誤差も許されない用途や、
  厳密性の要求される金銭の計算などでは、あまりおすすめしません。ご注意ください。


- 精度（桁数）や丸め処理

  RINPn で扱える数値の精度は、いわゆる倍精度（64bit精度）です。
  桁数単位では、値や演算内容にもよりますが、最大で16桁程度です。
  といっても、「算数的な意味の小数点以下」が最大16桁程度という事ではなく、
  「数値の頭の桁から尻尾の桁まで」を含めて（＝浮動小数点数の仮数部の桁数が）最大16桁程度です。

  一方で、精度の限界付近の桁には、先に述べたように内部処理に起因する誤差などが生じます。
  そのため計算結果は、そのような誤差に敏感な部分を落とすために10桁程度に丸めてから、画面に表示されます。
  この丸め処理の方式や桁数などについては、設定スクリプト「 Setting.vnano 」内で指定できます。


****************************************************************************************************
* ソースコードやリポジトリなど
****************************************************************************************************

  RINPn は、ソースコードが公開されている、オープンソースのソフトウェアです。
  ソースコードは、MITライセンスの下で、以下のリポジトリにおいて公開しています：

    https://github.com/RINEARN/rinearn-processor-nano


  また、RINPn は、内部処理にスクリプト言語 Vnano のスクリプトエンジンを使用しています。
  こちらもオープンソースの小型・軽量なスクリプトエンジンで、RINPn で行っているように、
  ユーザーが入力した式を処理したり、設定値をスクリプトとして書いて読み込んだりといった事に使用できます。
  ソースコードは、MITライセンスの下で、以下のリポジトリにおいて公開しています：

    https://github.com/RINEARN/vnano


****************************************************************************************************
* お問合せは御気軽に
****************************************************************************************************

  お問合せにつきましては、下記URLのページから御気軽にどうぞ！

      https://www.rinearn.com/ja-jp/contact/


****************************************************************************************************
* 商標などについて
****************************************************************************************************

  [1] OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。
  [2] Windows は、米国 Microsoft Corporation の米国およびその他の国における登録商標です。
  [3] Linuxは、Linus Torvalds氏の米国およびその他の国における商標または登録商標です。

  その他、文中の社名、商品名等は各社の商標または登録商標である場合があります。
