teacup. [ 掲示板 ] [ 掲示板作成 ] [ 有料掲示板 ] [ ブログ ]

 投稿者
  題名
  内容 入力補助画像・ファイル<IMG>タグが利用可能です。(詳細)
    
 URL
[ ケータイで使う ] [ BBSティッカー ] [ 書込み通知 ] [ 検索 ]

スレッド一覧

  1. スレッドが使えます(2)
  2. Paract BASIC(22)
  3. Amusement_Program(10)
  4. 改修予定のJIS非互換(3)
  5. 複数ページ長編プログラム(新規投稿)(16)
  6. 「十進BASIC第2掲示板」投稿記事リスト(17)
  7. Full BASIC互換ライブラリ(8)
  8. 「十進BASIC掲示板過去ログ」インデックス(トピック)(17)
  9. 人の色覚の数理(14)
  10. 「十進BASIC掲示板過去ログ」インデックス(ツリー)(91)
スレッド一覧(全10)  他のスレッドを探す  スレッド作成

*掲示板をお持ちでない方へ、まずは掲示板を作成しましょう。無料掲示板作成


画面表示

 投稿者:chyatora  投稿日:2019年 8月16日(金)01時07分49秒
返信・引用
  しばっち様

今後も宜しくお願いいたします。

早速、利用させていただきます。 ありがとうございました。

 
 

Re: 画面表示

 投稿者:しばっち  投稿日:2019年 8月15日(木)20時13分17秒
返信・引用
  > No.4693[元記事へ]

chyatoraさんへのお返事です。

> プログラム実行中に入力枠、テキスト枠、グラフィック枠すべてが開きますが、重ならないように
> 表示するテクニックを教えてください。


Windows版をご使用なら、Win32APIを使って位置を指定したり大きさを変えたり
表示・非表示と切り替えたりする方法があるようです。

https://hp.vector.co.jp/authors/VA008683/QA_WindowPos.htm

モニターの解像度に合わせて表示位置を調整してください。


CALL MOVETEXTWINDOW("TEXT",0,0)
CALL MOVETEXTWINDOW("GRAPHICS",800,0)
CALL MOVETEXTWINDOW("INPUT",0,500)
PRINT "ABCDEFG"
PLOT LINES:0,0;1,1
INPUT A$
END

EXTERNAL SUB MOVETEXTWINDOW(A$,X,Y)
SUB SETWINDOWPOS(HWND,HWNDINSAFTER,X,Y,CX,CY,NFLAGS)
   ASSIGN "user32.dll","SetWindowPos"
END SUB
CALL SETWINDOWPOS(WINHANDLE(A$),0,X,Y,0,0,1)
END SUB

EXTERNAL SUB RESIZETEXTWINDOW(A$,X,Y)
SUB SETWINDOWPOS(HWND,HWNDINSAFTER,X,Y,CX,CY,NFLAGS) !nFLG: 0=x0,y0,xw,yw 1=x0,y0 2=xw,yw
   ASSIGN "user32.dll","SetWindowPos"
END SUB
CALL SETWINDOWPOS(WINHANDLE(A$),0,0,0,X,Y,2)
END SUB

!'引数は,"MAIN","TEXT","GRAPHICS","INPUT","CHARACTER INPUT","TRACE", "LOCATE", "LOCATECHOICE", "TEXTWINDOW1", "TEXTWINDOW2", "RICHEDIT", "RICHEDIT1", "RICHEDIT2"のいずれか
 

画面表示

 投稿者:chyatora  投稿日:2019年 8月15日(木)12時49分53秒
返信・引用
  プログラム実行中に入力枠、テキスト枠、グラフィック枠すべてが開きますが、重ならないように
表示するテクニックを教えてください。
 

Re: 特殊関数

 投稿者:島村1243  投稿日:2019年 7月31日(水)05時05分14秒
返信・引用
  > No.4691[元記事へ]

しばっち様へのお返事です。

> sphbessel2.dll(boostライブラリー版)はこちらの同梱ミス(入れ忘れ)です。失礼致しました。
> それ以外の残り10個はC++17規格のものでVC++2017かVC++2019でしかコンパイルできません。
> VC++2017,VC++2019でコンパイルされたファイルはXP以上でしか動きません。
>
> VC++2008でコンパイルしてアップしました。
> 下記からダウンロードしてください。(sphbessel2.zip)
> ダウンロード期限:2019年9月28日(土)

ソースコード作成に用いられているC++バージョンの違いに依り、コンパイルしてもWin2KやWinXPで動作しないものが有るとのご説明で納得しました。
当方のPC上で動作した特殊関数dllは、工学書の学習時に計算で使わせて頂きます。

こちらの勝手なお願いにも関わらず、度重なるコンパイル作業を繰り返してくださり、本当に有難う御座いました。
 

Re: 特殊関数

 投稿者:しばっち  投稿日:2019年 7月30日(火)20時52分16秒
返信・引用 編集済
  > No.4690[元記事へ]

島村1243さんへのお返事です。

> Winndows2000(SP4)で動作確認の結果報告です。
> ご提供いただいたBASプログラム(合計132個)の内、動作しなかったBAS名と原因は次のとおりでした。
>
> (1)動作しなかったBAS名(11個)とその原因
>   BESSELDLL.BAS  bessel.dllが無い。
>   COMPELLINTDLL.BAS  comp_ellint.dllが無い。
>   COMPLEXDLL.BAS  PRINT CARG(X)でエラー:EXTYPE -9900
>   GAMMADLL.BAS  gamma.dlが無い。
>   ERFDLL.BAS      erf.dllが無い。
>   EXPINTDLL2.BAS  expint2.dllが無い。
>   GAMMADLL.BAS  gamma.dllが無い。
>   POLYNOMIALSDLL2.BAS  polynomials2.dllが無い。
>   SPHBESSELDLL.BAS  sphbessel.dllが無い
>   SPHBESSELDLL2.BAS  sphbessel2.dllが無い。
>   ZETADLL2.BAS  zeta2.dllが無い。

sphbessel2.dll(boostライブラリー版)はこちらの同梱ミス(入れ忘れ)です。失礼致しました。
それ以外の残り10個はC++17規格のものでVC++2017かVC++2019でしかコンパイルできません。
VC++2017,VC++2019でコンパイルされたファイルはXP以上でしか動きません。

VC++2008でコンパイルしてアップしました。
下記からダウンロードしてください。(sphbessel2.zip)


https://38.gigafile.nu/0928-d947544764f375aa252f7124d7d67e1e4
ダウンロード期限:2019年9月28日(土)




> ・ベッセル関数(bessel.dll)
>  WinXP版はdllが有ってもロード失敗。ベッセル関数はWin2KとWinXPの両方で利用不可状態。
> ・ガンマ関数(gamma.dll)<---WinXP版は使える。
> ・誤差関数(erf.dll)<---WinXP版は使える。
>
> 工学上でベッセル関数(bessel.dll)はよく出てくるので、Win2K、WinXPのいずれかで使えるようになると嬉しいです。。。


ベッセル関数関係は5本のdllがあり、bessel.dllはbessel_j0(x),bessel_j1(x),bessel_jn(n,x),bessel_y0(x),bessel_y1(x),bessel_yn(n,x)の
6個(nは整数,xは実数)を定義していますが、bessel2.dll,bessel3.dllと被っている上にGSLライブラリー版のbessel4.dllではbesseljnu(n,x),besselynu(n,x)
besselinu(n,x),besselknu(n,x)ではn,xを実数で指定できます。
besselyn(n,x),besselin(n,x),besselkn(n,x),besseljn(n,x)もあります。(nは整数,xは実数)

定義が被っているのでbessel.dllの代わりにbessel2.dll,bessel3.dll,bessel4.dllで代用してください。


ガンマ関数関係はdllを5本入れていてgamma.dllではtgamma(x)とlgamma(x)のガンマ関数、対数ガンマ関数でベータ関数と組み合わせ数comb(n,k),順列perm(n,k)は
ガンマ関数を使って定義しているだけです。

gamma2.dllが動くなら定義が被っているうえにgamma.dllにはないディガンマ関数、トリガンマ関数、ポリガンマ関数に逆ガンマ関数(y=gamma(x) → x=invgamma(y))
も定義しています。ベータ関数や組み合わせ数 BINOM(N,K)、順列 DPERM(N,K)もあります。
gamma2.dll,gamma3.dll,gamma4.dllで代用してください。


誤差関数も4本あり、erf.dllはerf2.dll,erf3.dll,erf4.dllと内容が被っています。
erf2.dllでは誤差関数の逆関数erfinv(x),erfcinv(x)も定義しています。


複数のライブラリーを使用しているために、内容(定義)が被ってしまうので
どれか動くdllで代用してください。


> (2)BASコードを直したら動作したBAS名(2個)
>  ・HYPERBOLICINTEGRALDLL.BAS:hyperbolicintegral.dllをロードできない。
>    BAS側のdll呼び出し名を『hyperbolicinteger.dll』に修正して解決。
>
>  ・SINCOSINTEGRALDLL.BAS:sincosintegerals.dllをロードできない。
>    BAS側のdll呼び出し名を『sincosinteger.dll』に修正して解決。


こちら側のミスです。dll名をあとで変更したのが原因でBASファイルの定義を修正し忘れていたようです。
失礼致しました。

integral(積分)が正しい名です。integer(整数)では間違いです。正弦積分、余弦積分でsincosintegralです。
hyperbolic(双曲線、sinh,cosh)の積分でhyperbolicintegralです。(あとは複数形でsがつく?)


VC++2008でコンパイルしたdllはXPでも動くはずなのですが...
 

Re: 特殊関数

 投稿者:島村1243  投稿日:2019年 7月29日(月)07時43分9秒
返信・引用
  > No.4688[元記事へ]

しばっち様へのお返事です。

> VC++2008でのGSLライブラリーのコンパイルがうまくいっていなかったようです。
> 設定を変えてVC++2008で再コンパイルしましたので、下記からダウンロードしたdllファイルと置き換えてください。
> こちらにアップロードしておきました(gsl.zip)
> ダウンロード期限:2019年9月23日(月)

Winndows2000(SP4)で動作確認の結果報告です。
ご提供いただいたBASプログラム(合計132個)の内、動作しなかったBAS名と原因は次のとおりでした。

(1)動作しなかったBAS名(11個)とその原因
  BESSELDLL.BAS  bessel.dllが無い。
  COMPELLINTDLL.BAS  comp_ellint.dllが無い。
  COMPLEXDLL.BAS  PRINT CARG(X)でエラー:EXTYPE -9900
  GAMMADLL.BAS  gamma.dlが無い。
  ERFDLL.BAS      erf.dllが無い。
  EXPINTDLL2.BAS  expint2.dllが無い。
  GAMMADLL.BAS  gamma.dllが無い。
  POLYNOMIALSDLL2.BAS  polynomials2.dllが無い。
  SPHBESSELDLL.BAS  sphbessel.dllが無い
  SPHBESSELDLL2.BAS  sphbessel2.dllが無い。
  ZETADLL2.BAS  zeta2.dllが無い。

上記の内、
・ベッセル関数(bessel.dll)
 WinXP版はdllが有ってもロード失敗。ベッセル関数はWin2KとWinXPの両方で利用不可状態。
・ガンマ関数(gamma.dll)<---WinXP版は使える。
・誤差関数(erf.dll)<---WinXP版は使える。

工学上でベッセル関数(bessel.dll)はよく出てくるので、Win2K、WinXPのいずれかで使えるようになると嬉しいです。。。

(2)BASコードを直したら動作したBAS名(2個)
 ・HYPERBOLICINTEGRALDLL.BAS:hyperbolicintegral.dllをロードできない。
   BAS側のdll呼び出し名を『hyperbolicinteger.dll』に修正して解決。

 ・SINCOSINTEGRALDLL.BAS:sincosintegerals.dllをロードできない。
   BAS側のdll呼び出し名を『sincosinteger.dll』に修正して解決。

以上です。







 

Re: 特殊関数

 投稿者:島村1243  投稿日:2019年 7月27日(土)09時02分52秒
返信・引用
  しばっち様へのお返事です。

> VC++2008でのGSLライブラリーのコンパイルがうまくいっていなかったようです。
> 設定を変えてVC++2008で再コンパイルしましたので、下記からダウンロードしたdllファイルと置き換えてください。
>
> こちらにアップロードしておきました(gsl.zip)
>
> https://29.gigafile.nu/0923-c053c5efdee728c42009f9bdb03139651
> ダウンロード期限:2019年9月23日(月)

Windows2000でも使えるようにと、度重なるご尽力を頂き、本当に有難うございます。
ご提供頂いたwindows2000用のdll.zipとgsl.zipを使用させて頂き、結果をご報告致します。
なお、結果のご報告までに暫くお時間を頂きたくお願い申し上げます。
 

Re: 特殊関数

 投稿者:しばっち  投稿日:2019年 7月25日(木)19時56分46秒
返信・引用
  > No.4687[元記事へ]

> こちらで試してみるとコンパイルの仕方が悪かったのか、VC++2008でのdllが対応していないのかロードできないとエラーが
> 頻発してしまいました。(念のため VC++2008のランタイムはインストールしました)



VC++2008でのGSLライブラリーのコンパイルがうまくいっていなかったようです。
設定を変えてVC++2008で再コンパイルしましたので、下記からダウンロードしたdllファイルと置き換えてください。

こちらにアップロードしておきました(gsl.zip)

https://29.gigafile.nu/0923-c053c5efdee728c42009f9bdb03139651

ダウンロード期限:2019年9月23日(月)
 

Re: 特殊関数

 投稿者:しばっち  投稿日:2019年 7月24日(水)19時35分48秒
返信・引用
  > No.4678[元記事へ]

島村1243さんへのお返事です。

> この結果、Windows2000上のBASIC.exeでは特殊関数の利用は諦めないとダメの様でした。


既にサポート切れで、リンク切れしかないだろうと諦めていたVC++2008の入手が出来ました。

http://gurigumi.s349.xrea.com/programming/visualcpp/install2.html



isoファイルをダウンロードし、フリーソフトのisoマウントソフトを使ってDVDに焼くことなく
インストールできました。

そして、VC++2008で可能な119本がコンパイル出来ました。VC++2008でコンパイルされたファイルはWindows 2000に対応しているようです。

また、GSLライブラリー関係はWindows XP 同様に実行時に、libgsl.dllとlibgslcblas.dllが必要です。
しかしながら、Windows 2000がlibgsl.dll及びlibgslcblas.dllに対応しているかは分かりません。


こちらで試してみるとコンパイルの仕方が悪かったのか、VC++2008でのdllが対応していないのかロードできないとエラーが
頻発してしまいました。(念のため VC++2008のランタイムはインストールしました)



とりあえず、下記にアップしておきました。dllファイルのみ(dll.zip)

https://10.gigafile.nu/0922-c812d54b044b39d9b69632b7e83ebdf5c


ダウンロード期限:2019年9月22日(日)


ぜひ、Windows 2000でお試しください。


 

Re: 特殊関数

 投稿者:島村1243  投稿日:2019年 7月23日(火)06時33分17秒
返信・引用
  前結果報告文のうち、【作業3】の訂正です(島村1243)。

***訂正前の記述***
> 【作業3】libgsl.dllとlibgslcblas.dllを[C:\Windows\System32\]ホルダに貼り付け。
> (BASIC.exeがインストールされているホルダに貼り付けると、このdllは動作しなかった。)

***訂正後の記述***
【作業3】libgsl.dllとlibgslcblas.dllをBASIC.exeがインストールされているホルダに貼り付ける。
( [C:\Windows\System32\]ホルダに貼り付けでも動作するが、上記の方がファイルを管理し易い。)






 

Re: 特殊関数

 投稿者:島村1243  投稿日:2019年 7月19日(金)09時16分27秒
返信・引用
  しばっち様へのお返事です。

> BASソースの一部を修正したら EXTYPE -9900が出なくなりました。
> ---中略---
> dllがロードできなかった残りの36個のファイルのうちgslライブラリーを使用した28個のcppファイルのコンパイルにVC++2010で成功しました。
> 但し、バージョンがgsl 2.2からgsl 1.8にダウンしています。これによりexpint3.cpp内に定義されている
> expint_en(指数積分)関数が未定義(エラー)のため使用できません。(EXPINTDLL3.BASから該当部分を外しています)
> COMPLEXDLL.BAS(complex.dll)がうまく動かないようですが...gslのバージョンの違いのせいかもしれない。
>
> また、実行時に別途libgsl.dllとlibgslcblas.dllが必要です。(BASIC.EXEと同じフォルダに入れてください)
> ---中略---
> ぜひ、こちらもお試しください。

上記説明に基づいてWindowsXP(SP3)上のBASIC.exeで実行したのですが、「libgsl.dllとlibgslcblas.dllがロードできない」とのエラーが出てしまい、解決するのに時間を要しお返事が遅くなり申し訳ありません。

作業は次の順で行いました。
【作業1】1回目に頂いたdllホルダに、2回目に頂いたdllホルダ内ファイルを上書き保存。
【作業2】上書き保存後のdllホルダに、更に3回目に頂いたdllホルダ内ファイルを上書き保存。
【作業3】libgsl.dllとlibgslcblas.dllを[C:\Windows\System32\]ホルダに貼り付け。
(BASIC.exeがインストールされているホルダに貼り付けると、このdllは動作しなかった。)

【作業4】最初に頂いたbasホルダに、3回目に頂いたbasホルダ内ファイルを上書き保存。
【作業5】マイクロソフトのダウンロードサービスで、[x86用のvcredist_x86.exe]をダウンロードし、インストールした。
(このexeは、VC++2010のランタイムMSVCR100.dllをインストールするもので、これを実行しないと作業3で書いたlibgsl.dllとlibgslcblas.dllが動作しなかった。)

【作業6】129個の.BASを実行した結果、不動作は下記2個になりました(凄いです!!)。

[不動作のBASファイル名]   [不動作時のメッセージ]
 ● BESSELDLL.BAS    bessel.dllをロードできない。
               ASSIGN ".\DLL\bessel.dll","dj0",FPU

 ● COMPLEXDLL.BAS      PRINT CARG(X)で エラー:EXTYPE -9900

なお、bessel.dllは先のdllホルダ内に在る事は確認しました。
以上、2回目の確認結果です。
 

Re: 特殊関数

 投稿者:しばっち  投稿日:2019年 7月17日(水)19時26分23秒
返信・引用
  > No.4683[元記事へ]

島村1243さんへのお返事です。

> 確認したBASプログラムの総数129個のうち
>  ● dllがロードできないBASプログラムの総数36個
>  ● dllをロードするが、演算途中でエラー停止するBASプログラム総数10個
>   ● 正常に動作が完了するプログラム総数=129個ー36個ー10個=83個
> でした。
> dllがロード出来ない36個=129個ーしばっち様が再コンパイルした数93個
> となり数が合うので、36個がdllをロード出来ない理由はしばっち様の説明のとおりだと思います。
>
> なお不思議な事に、GAMMADLL.BASのみが前のdllで動作したのですが、確認試験ではGAMMADLL.BASは新dllをロード出来ませんでした。原因不明です。

まず、GAMMADLL.BASが読み込むDLLファイルはgamma.dllで、これは標準ライブラリーのC++17(2017年に改訂された標準規格)を使用したものです。
VC++2010では対応していないのでコンパイルできない為 gamma.dllは入っていません。

> (2)dllをロードするが、演算途中でエラー停止する10個のBASファイル名と
> エラーメッセージと停止するコード
>
>  AIRYDLL.BAS     エラー:EXTYPE -9900   LET Y=AIRY_AI(X)
>   CGAMMADLL2.BAS  エラー:EXTYPE -9900   PRINT CGAMMA(X)
>   ELLINTDDLL.BAS  エラー:EXTYPE -9900   LET Y=ELLINTD(X,PHI)
>   HYPERBOLICSINCOSINTEGRALDLL.BAS  エラー:EXTYPE 1003 (停止コードは長いので略)
>   IBETADLL.BAS    エラー:EXTYPE -9900   LET Y=P_T(N,X)
>   JACOBIDLL.BAS   エラー:EXTYPE -9900   LET Y=JACOBIDS(U,X)
>   POLYGAMMADLL2.BAS エラー:EXTYPE -9900 LET Y=POLYGAMMA(N,X)
>   SINECOSINEINTEGRALSDLL.BAS  エラー:EXTYPE 1003 (停止コードは長いので略)
>   SPHBESSELDLL2.BAS  エラー:EXTYPE -9900  LET Y=SPHBESSEL(N,X)
>   TDISTDLL.BAS   エラー:EXTYPE -9900    LET Y=P_T(N,X)

どうやら定義域エラー(内部エラー)を起こしていたようです。
VC++2012とVC++2010のコンパイラーの違い?

FOR X=0 TO 1 STEP 1/128 ----> FOR X=1/128 TO 1-1/128 STEP 1/128
定義域に0と1は含まれない等(0<x<1 と 0<=x<=1 の違い)

BASソースの一部を修正したら EXTYPE -9900が出なくなりました。

また、私自身が関数群をよく知らず定義域を理解してなかった為
に起こったエラーの可能性も高いです。

大変失礼致しました。


> (1)dllがロードできない36個のBASファイル名
>
>  AIRYDLL3.BAS    BESSELDLL.BAS    BESSELDLL4.BAS
>  BETADLL3.BAS       CLAUSENDLL.BAS  CLGAMMADLL.BAS
>   COMPELLINTDLL.BAS  COMPLEXDLL.BAS   COULOMBDLL.BAS
>  DAWSONDLL2.BAS     DEBYEDLL.BAS      DILOGDLL.BAS
>  ELLINTDLL2.BAS     ERFDLL.BAS       ERFDLL4.BAS
>  ERFZDLL.BAS        EXPINTDLL2.BAS    EXPINTDLL3.BAS
>  FERMIDIRACDLL.BAS
>  GAMMADLL.BAS <---これは前dllでは動作したが、新dllでは何故か不動作だった。
>  GAMMADLL4.BAS     GEGENDLL.BAS      HYPERBOLICINTEGRALDLL.BAS
>  HYPERGDLL.BAS     LAMBERTDLL.BAS    POCHDLL.BAS
>  POLYGAMMADLL.BAS  POLYNOMIALSDLL2.BAS
>  POLYNOMIALSDLL3.BAS
>  POLYSOLVEDLL.BAS  SINCOSINTEGRALDLL.BAS
>  SPHBESSELDLL.BAS  SYNCHROTRONDLL.BAS
>  TRANSPORTDLL.BAS  ZETADLL2.BAS      ZETADLL3.BAS


dllがロードできなかった残りの36個のファイルのうちgslライブラリーを使用した28個のcppファイルのコンパイルにVC++2010で成功しました。
但し、バージョンがgsl 2.2からgsl 1.8にダウンしています。これによりexpint3.cpp内に定義されている
expint_en(指数積分)関数が未定義(エラー)のため使用できません。(EXPINTDLL3.BASから該当部分を外しています)
COMPLEXDLL.BAS(complex.dll)がうまく動かないようですが...gslのバージョンの違いのせいかもしれない。

また、実行時に別途libgsl.dllとlibgslcblas.dllが必要です。(BASIC.EXEと同じフォルダに入れてください)

下記URLにアップしておきました。(dll.zip)

https://33.gigafile.nu/0915-c90f4d86cdfd56816c8165b4e4c1c2c4b

ダウンロード期限:2019年9月15日(日)


ぜひ、こちらもお試しください。

 

Re: 特殊関数

 投稿者:島村1243  投稿日:2019年 7月16日(火)21時30分10秒
返信・引用
  しばっち様へのお返事です。

> gslライブラリーによるものと標準ライブラリーの規格C++17によるものはvc++2010ではコンパイルできませんが、
> それ以外のalglibライブラリーとboostライブラリーによる特殊関数についての93本ばかりをvc++2010にて再コンパイルしてみました。
> もしかしたらこれでWindow XPでも動くかもしれません。
> 下記からダウンロードしdllフォルダに置き換えて、ぜひ実行してみてください。

WindowsXP(SP3)上のBASIC.exe(v7.8.5.3)に新dllを適用して動作確認した結果報告です。
(なお、Windows2000でも試しましたがWindows2000では全滅です。)

確認したBASプログラムの総数129個のうち
 ● dllがロードできないBASプログラムの総数36個
 ● dllをロードするが、演算途中でエラー停止するBASプログラム総数10個
  ● 正常に動作が完了するプログラム総数=129個ー36個ー10個=83個
でした。
dllがロード出来ない36個=129個ーしばっち様が再コンパイルした数93個
となり数が合うので、36個がdllをロード出来ない理由はしばっち様の説明のとおりだと思います。

なお不思議な事に、GAMMADLL.BASのみが前のdllで動作したのですが、確認試験ではGAMMADLL.BASは新dllをロード出来ませんでした。原因不明です。

(1)dllがロードできない36個のBASファイル名

 AIRYDLL3.BAS    BESSELDLL.BAS    BESSELDLL4.BAS
 BETADLL3.BAS       CLAUSENDLL.BAS  CLGAMMADLL.BAS
  COMPELLINTDLL.BAS  COMPLEXDLL.BAS   COULOMBDLL.BAS
 DAWSONDLL2.BAS     DEBYEDLL.BAS      DILOGDLL.BAS
 ELLINTDLL2.BAS     ERFDLL.BAS       ERFDLL4.BAS
 ERFZDLL.BAS        EXPINTDLL2.BAS    EXPINTDLL3.BAS
 FERMIDIRACDLL.BAS
 GAMMADLL.BAS <---これは前dllでは動作したが、新dllでは何故か不動作だった。
 GAMMADLL4.BAS     GEGENDLL.BAS      HYPERBOLICINTEGRALDLL.BAS
 HYPERGDLL.BAS     LAMBERTDLL.BAS    POCHDLL.BAS
 POLYGAMMADLL.BAS  POLYNOMIALSDLL2.BAS
 POLYNOMIALSDLL3.BAS
 POLYSOLVEDLL.BAS  SINCOSINTEGRALDLL.BAS
 SPHBESSELDLL.BAS  SYNCHROTRONDLL.BAS
 TRANSPORTDLL.BAS  ZETADLL2.BAS      ZETADLL3.BAS

(2)dllをロードするが、演算途中でエラー停止する10個のBASファイル名と
エラーメッセージと停止するコード

 AIRYDLL.BAS     エラー:EXTYPE -9900   LET Y=AIRY_AI(X)
  CGAMMADLL2.BAS  エラー:EXTYPE -9900   PRINT CGAMMA(X)
  ELLINTDDLL.BAS  エラー:EXTYPE -9900   LET Y=ELLINTD(X,PHI)
  HYPERBOLICSINCOSINTEGRALDLL.BAS  エラー:EXTYPE 1003 (停止コードは長いので略)
  IBETADLL.BAS    エラー:EXTYPE -9900   LET Y=P_T(N,X)
  JACOBIDLL.BAS   エラー:EXTYPE -9900   LET Y=JACOBIDS(U,X)
  POLYGAMMADLL2.BAS エラー:EXTYPE -9900 LET Y=POLYGAMMA(N,X)
  SINECOSINEINTEGRALSDLL.BAS  エラー:EXTYPE 1003 (停止コードは長いので略)
  SPHBESSELDLL2.BAS  エラー:EXTYPE -9900  LET Y=SPHBESSEL(N,X)
  TDISTDLL.BAS   エラー:EXTYPE -9900    LET Y=P_T(N,X)

以上です。
 

Re: 特殊関数

 投稿者:島村1243  投稿日:2019年 7月16日(火)09時12分24秒
返信・引用
  しばっち様へのお返事です。

> gslライブラリーによるものと標準ライブラリーの規格C++17によるものはvc++2010ではコンパイルできませんが、
> それ以外のalglibライブラリーとboostライブラリーによる特殊関数についての93本ばかりをvc++2010にて再コンパイルしてみました。
>
> もしかしたらこれでWindow XPでも動くかもしれません。以前ダウンロードしたdllフォルダの名前を他に変更(または移動)しておいて(上書きはせずに)
> 下記からダウンロードし解凍してできたdllフォルダに置き換えて、ぜひ実行してみてください。

お手数のかかる再コンパイルをして頂き、WindowsXPを使う私にとって非常に有り難いです。
ご提供頂いた新dllを適用して全BASプログラムを走らせ、「どれが動作し、どれが動作しないか」の結果を、追ってご報告致しますので、しばらくお時間を頂きたく思います。
 

Re: 特殊関数

 投稿者:しばっち  投稿日:2019年 7月15日(月)20時57分13秒
返信・引用
  島村1243さんへのお返事です。

> WindowsXP_HOME(SP3)上のBASIC(v7853).exeでGAMMADLL.BASは正常に動作したので、
> その後、他のDLL.BASについても動作を確認したところ、皆
> ”.dllがロード出来ない”
> とのメッセージが出ましたので、WindowsXP(SP3)では、GAMMADLL.BAS以外は動作しないようです。少なくともWindows7以上が必要なのかなと思いました(残念ながらこのOSは持っていない)。

gslライブラリーによるものと標準ライブラリーの規格C++17によるものはvc++2010ではコンパイルできませんが、
それ以外のalglibライブラリーとboostライブラリーによる特殊関数についての93本ばかりをvc++2010にて再コンパイルしてみました。

もしかしたらこれでWindow XPでも動くかもしれません。以前ダウンロードしたdllフォルダの名前を他に変更(または移動)しておいて(上書きはせずに)
下記からダウンロードし解凍してできたdllフォルダに置き換えて、ぜひ実行してみてください。


ダウンロード期限:2019年8月14日(水) (dll.zip)

https://13.gigafile.nu/0814-cd37b2c7a060129e034374286734f41cc
 

Re: 特殊関数

 投稿者:島村1243  投稿日:2019年 7月15日(月)09時45分26秒
返信・引用
  しばっち様へのお返事です。

ご回答有難うございます。

> cppソースのコンパイルにMicrosoft Visual C++ 2012,2015,2019を使用していますが、
> コンパイルされたファイルの動作対応自体がどうやらWindows XP SP3以降のようです。

WindowsXP_HOME(SP3)上のBASIC(v7853).exeでGAMMADLL.BASは正常に動作したので、
その後、他のDLL.BASについても動作を確認したところ、皆
”.dllがロード出来ない”
とのメッセージが出ましたので、WindowsXP(SP3)では、GAMMADLL.BAS以外は動作しないようです。少なくともWindows7以上が必要なのかなと思いました(残念ながらこのOSは持っていない)。
 

Re: 特殊関数

 投稿者:しばっち  投稿日:2019年 7月14日(日)19時26分45秒
返信・引用
  > No.4678[元記事へ]

島村1243さんへのお返事です。

> 私は2004年頃のPCを使っているのですが、
> OSがWindows2000(professional)SP4のPCで上記を行なっても「見つからない」とのメッセージが出ました。
> OSがWindowsXPのPCでは、上記を行なって正常に動作(描画)しました。
>
> この結果、Windows2000上のBASIC.exeでは特殊関数の利用は諦めないとダメの様でした。

cppソースのコンパイルにMicrosoft Visual C++ 2012,2015,2019を使用していますが、
コンパイルされたファイルの動作対応自体がどうやらWindows XP SP3以降のようです。

Microsoft Visual C++ 2012以前のコンパイラーを使用すれば動くようになるかも
しれませんが、コンパイラー自体が古くなるので、逆にコンパイラーが未対応で
エラーが出るかもしれません。

C/C++にも次々と新しい規格(最新はC++17)が出ているようです。

gccなどのコンパイラーが他にもまだありますが、それでもWindows2000に対応させていくのは
難しいかもしれません。

 

Re: 特殊関数

 投稿者:島村1243  投稿日:2019年 7月14日(日)17時35分31秒
返信・引用
  しばっち様へのお返事です。

> もし、実行時にDLLフィルがロードできない、見つからない等のエラーが出る場合は、ZIP
> ファイルを解凍して出来たDLLフォルダごとBASIC.EXEと同じフォルダに入れてください。

私は2004年頃のPCを使っているのですが、
OSがWindows2000(professional)SP4のPCで上記を行なっても「見つからない」とのメッセージが出ました。
OSがWindowsXPのPCでは、上記を行なって正常に動作(描画)しました。

この結果、Windows2000上のBASIC.exeでは特殊関数の利用は諦めないとダメの様でした。
以上、報告です。
 

Re: 特殊関数

 投稿者:しばっち  投稿日:2019年 7月12日(金)20時36分1秒
返信・引用
  対数ガンマ(LogGamma)の負数側のグラフ描画に対応しました。
加えてディガンマ関数、ガンマ関数の微分のグラフも描画できるようになりました。


一番上の行に
DECLARE EXTERNAL FUNCTION GammaLib.LogGamma
を加えて

対数ガンマのグラフ描画部を下記と置き換えてください。ディガンマ関数(対数ガンマの微分)、ガンマ関数の微分のグラフ描画部も加えています。

SET WINDOW -5,5,-5,5
DRAW GRID(1,1)
SET LINE COLOR 3
FOR X=-5 TO 5 STEP 1/128
IF FP(X)<>0 OR X>0 THEN
LET Y=LogGamma(X)
PLOT LINES:X,Y;
ELSE
PLOT LINES
END IF
NEXT X
PAUSE
CLEAR
SET WINDOW -5,5,-5,5
DRAW GRID(1,1)
SET LINE COLOR 4
FOR X=-5 TO 5 STEP 1/128
IF FP(X)<>0 OR X>0 THEN
LET Y=DIGAMMA(X)
PLOT LINES:X,Y;
ELSE
PLOT LINES
END IF
NEXT X
PAUSE
CLEAR
SET WINDOW -5,5,-5,5
DRAW GRID(1,1)
SET LINE COLOR 5
FOR X=-5 TO 5 STEP 1/128
IF FP(X)<>0 OR X>0 THEN
LET Y=GAMMA(X)*DIGAMMA(X) !' ガンマ関数の微分
PLOT LINES:X,Y;
ELSE
PLOT LINES
END IF
NEXT X

そして、モジュールGammaLibを下記と修正してください。、
IF X < 0 THEN から END IFまでの4行(赤色)を加筆しています。
ディガンマ関数も付け足して下さい。


MODULE GammaLib
PUBLIC FUNCTION LogGamma
SHARE NUMERIC LOG_2PI
SHARE NUMERIC N,B0,B1,B2,B4,B6,B8,B10,B12,B14,B16
LET LOG_2PI=1.83787706640934548 !/* $\LOG 2\pi$ */
LET N = 8
LET B0 = 1 !/* 以下はBernoulli数 */
LET B1 = (-1.0 / 2.0)
LET B2 = ( 1.0 / 6.0)
LET B4 = (-1.0 / 30.0)
LET B6 = ( 1.0 / 42.0)
LET B8 = (-1.0 / 30.0)
LET B10 =( 5.0 / 66.0)
LET B12 =(-691.0 / 2730.0)
LET B14 =( 7.0 / 6.0)
LET B16 =(-3617.0 / 510.0)
EXTERNAL FUNCTION LogGamma(x) !/* ガンマ関数の対数 */
DECLARE NUMERIC v, w
IF X < 0 THEN
LET LogGamma=LOG(ABS(PI/SIN(PI*x)))-LogGamma(1-x)
EXIT FUNCTION
END IF

LET v = 1
DO WHILE x < N
LET v = v * x
LET x = x+1
LOOP
LET w = 1 / (x * x)
LET LogGamma=((((((((B16 / (16 * 15)) * w + (B14 / (14 * 13))) * w &
& + (B12 / (12 * 11))) * w + (B10 / (10 * 9))) * w &
& + (B8 / ( 8 * 7))) * w + (B6 / ( 6 * 5))) * w &
& + (B4 / ( 4 * 3))) * w + (B2 / ( 2 * 1))) / x &
& + 0.5 * LOG_2PI - LOG(v) - x + (x - 0.5) * LOG(x)
END FUNCTION
END MODULE

EXTERNAL FUNCTION DIGAMMA(X)
IF X<0 THEN
LET DIGAMMA=DIGAMMA(1-X)-PI/TAN(PI*X)
EXIT FUNCTION
END IF
LET EULER=0.577215664901532860606512
FOR N=0 TO 1000
LET S=S-(1/(X+N)-1/(N+1))
NEXT N
LET DIGAMMA=S-EULER
END FUNCTION
 

Re: 特殊関数

 投稿者:島村1243  投稿日:2019年 7月12日(金)06時37分52秒
返信・引用
  しばっちさんへのお返事です。

> specialfunction.zipファイルをダウンロードしていただくとその中にGAMMADLL?.BASというファイルが5本入っており、そのいずれかを実行すればガンマ関数のグラフを
> 描くことができますが、Linux版、Mac版をご利用の方は実行できません。Windows版十進BASIC用です。(更に詳しくいうとSSE2 対応のアーキテクチャを持つCPUであること)
> 5本あるのは、使用しているライブラリーの違いで、定義されている関数に若干違いがあります。
>
> もし、実行時にDLLフィルがロードできない、見つからない等のエラーが出る場合は、ZIPファイルを解凍して出来たDLLフォルダごとBASIC.EXEと同じフォルダに入れてください。
> 若しくは、ASSIGN文の相対パスを対象のDLLファイルへの絶対パスに書き換えてください。

ご丁寧なご教示、有難うございました。
早速、倣って実行してみたいと思います。
 

レンタル掲示板
/165