• ベストアンサー

srand48? drand48?

お世話になっております。 あるソフトウェアを使うに当たってMediSynというツールをコンパイルして 使うようにアドバイスをもらったのですが残念ながら力不足によりできないでいます。 もらったMedisynフォルダの中はcfg, cpp, headerで構成されていてそのうちのcppファイルを 全部コンパイルしてobjを作ればいいのかと思ってたのですが・・・ コンパイラをborlandとvisualstudio両方使ってもどちらもsrand48, drand48という関数がない? といったエラーが出てきてしまいます ググッたところいくつか該当する似たような問題は見つけられたのですがはっきりと解決方法は書かれていません。 それなら心当たりがあるという方、どうぞよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#113783
noname#113783
回答No.5

どうやた2つの関数は UNIX OS が 用意している関数のようです。 2つとも乱数(ランダムな数値)を生成する関数で、drand48はdouble型の乱数を生み出し、srand48はdrand48を使う前に呼び出しdrand48が正しく動作する為に初期設定を行う関数のようです。この程度なら、自作でdoubleがたの乱数を生成する関数を作り、drand48が呼び出されている場所で置き換えて呼び出せば(srand48は無視で結構)正しく動作すると思います。もしよろしければ補足してください。

kokema
質問者

補足

皆様たくさんのアドバイスありがとうございます。 できることならcygwinを通さずwindowsのままやりたかったので 以下のURL http://www001.upp.so-net.ne.jp/isaku/rand.html から引っ張ってきた記述をcppファイルがincludeしていたheaderにぶち込んだところ解決しました。 また上のURLの内容を見る限りdrand()関数はvisual C++では使えない?らしいです。 立て続けで申し訳ないのですが、今度は宣言に型が多すぎるというエラーが出て これは引っ張ってきた記述の中の static long long x=0x1234ABCD330E;      ↑longが2つもある が原因のようです。しかしこのlong long以外で数字を表現できなさそうです。 それ以外はもう問題はないと思いますのでもう一知恵お貸しください。

その他の回答 (4)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

Cygwin 使ってみるとか.

noname#101303
noname#101303
回答No.3

srand48, drand48 両方とも標準関数じゃない。 ライブラリ関数なら、自分で実装しないと無理かもね。

noname#113783
noname#113783
回答No.2

ヘッダーファイル(多分header)にもコンパイルに必要な情報が入っていますよ。vs c++2008しか使ったことがありませんが、統合開発環境(オレンジ色のアイコンのアプリケーション)で[ファイル(メニューバー)]⇒[新規作成]⇒[プロジェクト]⇒適当にプロジェクト名入力して、cppファイル内に「main()」という記述があるなら[win32 コンソールアプリケーション]、「WinMain(略)」という記述があるなら[win32 プロジェクト]、(両方なかったら補足してくださればまた回答します)を選択して[OK]⇒アプリケーションウィザードが開き、[次へ]⇒「空のプロジェクト」にチェックをつけ、他変更せず[完了]を押してください。長くなりましたが、これでプロジェクトが作られます。ソリューションエクスプローラーの「ソースファイル」部分にcppファイルを追加、「ヘッダーファイル」部分にheaderを追加してください。あとはビルドするだけで、[ビルド(メニューバー)]⇒[ソリューションのビルド]でビルドできます。cfgは何かの設定ファイルのようですが、何でしょうね?読まないとわからないですね。失敗したりわからなかったりしたら補足していただければ幸いです。

noname#101303
noname#101303
回答No.1

参考まで。 http://www.math.meiji.ac.jp/~mk/labo/text/giji-ransuu/node6.html OSが違うんじゃない?

kokema
質問者

お礼

Linuxじゃなきゃダメなんでしょうか? 使っているのはwindowsxpです。 borlandもvisualstudioも最新のダウンロードしたてなのでそちらのほうに srand48,drand48という関数がかけてしまっているのかと思ってました。

関連するQ&A

  • .cpp を再度 作り出すことと、.obj ファィルはどのように使うの?

     コンパイラーは Borland C++Compilerに GUIパッチをあてた、"C Pad for Borland C++Compiler"で 作業をしています。  コンパイルをすると、 .cpp .obj .exeの 3つのファィルができますが、.cpp のファィルが どういう訳か わかりませんが、見つかりませんでした。  それで、.exeの訂正が出来ないので、.exeを 再度 コンパイルしてみたのですが、この結果は、2行ほどの文字化けが出てきただけです。どうすれば、.cpp を再度 作り出すことが出来るのでしょうか?  もうひとつは、.obj ファィルはどのようにして、利用できるのでしょうか?文字からして オブジェクトのファィルらしいかな?とはおもいますが、このコンパイラーが、 cのみでなく、c++を作るということはかいてありましたが、さしあたって、使い道が分かりません。同時に作り出すということだけを 認識していればいいことなのでしょうか?  以上2点について、お伺いします。

  • リンカのコマンドライン

    こんにちは。 C言語の勉強をしているのですが、リンカができなくて困っています。 環境: OS:windows2000 コンパイラ:Borland C++ 5.5 (他に必要な環境があれば、ご教授ください) まず、main()関数と作成した関数をコンパイルします。 Borland C++ 5.5のヘルプを参照して、 「bcc32 main.obj make.obj pro.lib」 これでリンクしようとしたのですが、 「ファイル pro.libが開けません」 とプロンプトに出力されます。 (main()関数→main.obj 作成した関数→make.obj 関数プロトタイプ宣言するファイル→pro.lib)  保存は(main.obj→main.cpp、make.obj→make.cpp、pro.lib→pro.h) と以上のようになっております。 コーディングミスは参考書を散々読み直したので、間違いないと思っております。 ただ、参考書が間違っていたら、取り付く島もありません。 どうぞ、お願いいたします。

  • drand48()が使えない

    お世話になっております、皆様のおかげで昨日ウインドウズ上でCを動かせるようになったサルプログラマーです。 Borlandの無償配布をダウンロードしました。Linuxで gcc program1.c -o program1 -lm -O としてコンパイルできていたものをそのまま持ってきて(拡張子変えて)、 C:\bcc>bcc32 program1.cpp としたら Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland program1.cpp: エラー E2268 program1.cpp 61: 未定義の関数 'srand48' を呼び出した(関数 main() ) エラー E2268 program1.cpp 66: 未定義の関数 'drand48' を呼び出した(関数 main() ) *** 2 errors in Compile *** となってしまいました。 いままでプログラムの中身は ======================================================== srand48(seed); for(i=0; i<I; i++){ while(1){ do{ x=drand48()*2.0-1.0; y=drand48()*2.0-1.0; : : ======================================================== という形でLinux上ではコンパイルできてましたが、ウインドウズに持ってきたらダメでした。ある掲示板でdrand48()は非標準関数であるとありましたが、このために使えないのでしょうか?[0,1)のdoubleの乱数を返す、また質がいいからオススメと友達に言われて使っていたのです。ですから非常にいいなあと思って使っていたのですが、どうにかならないでしょうか。使えるようにするにはどうしたらよいのでしょうか、色々あるかと思いますが何か解決方法をご教授ください。

  • bcc55のエラー(cox32.obj)

    コンパイルすると、いつも Fatal:ファイルCOX32.OBJが開けません と言うエラーが出てしまいます。 bcc55のbinフォルダーにbcc32.cfgというファイルを作り、中身に -I"c:\Borland\Bcc55\include" -L"c:\Borland\Bcc55\lib" ilink32.cfgには -L"c:\Borland\Bcc55\lib" となっています。 初歩的なことかもしれませんがよろしくお願いします。

  • c++ , template , ファイル分割 , 助けてください...

    //-----------------coord.h------------- template <class type> class coord { type v[3]; public: coord(void); void Show(void); }; //-----------------main.cpp------------ #include<iostream> #include"coord.h" using namespace std; int main(void) { coord<double> ob; ob.Show(); return 0; } //----------------------coord.cpp----------- #include<iostream> #include"coord.h" using namespace std; template <class type> coord<type>::coord(void) { v[0]=v[1]=v[2]=0; } template <class type> void coord<type>::Show(void) { cout << "hello" << endl; } 同一フォルダ内に上記のファイルが 3 つあります. つまり上の 3 つのファイルを分割してコンパイルさせたいです. この状態で...MS-DOSプロンプトからコンパイルします. C:\test>bcc32 -c coord.cpp Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland coord.cpp: C:\test>bcc32 -c main.cpp Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland main.cpp: C:\test>bcc32 -emain main.obj coord.obj Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル 'coord<double>::coord<double>()' が未解決(C:\USERS\TAITO\PR OG\CPP\TEST\MAIN.OBJ が参照) Error: 外部シンボル 'coord<double>::Show()' が未解決(C:\USERS\TAITO\PROG\CPP\TE ST\MAIN.OBJ が参照) すると, このようなエラー文が出てしまい 実行可能ファイルができません. コンパイラはbccです. 原因が全く分かりません. 助けてください... ちなみに, 分割せずにコンパイルすると通ります. 自分は c 言語での分割コンパイル経験はあるので それをそのまま c++ 言語でも用いているのですが, 何か変えなければならないのでしょうか?

  • libjpegに関する質問

    bcc5.5.1でlibjpegを使いたいのですがうまくいきません 説明サイトどおりにmakeして、生成された全てのヘッダファイルをc:¥borland\bcc55¥Includeに移動してlibjpeg.libはc:¥borland¥bcc55¥Libに移動したのですが、 Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland jpeg_read_test.c: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル '_jpeg_std_error' が未解決(C:\CPP\JPEG_READ_TEST.OBJ が参照) Error: 外部シンボル '_jpeg_CreateDecompress' が未解決(C:\CPP\JPEG_READ_TEST.OBJ が参照) Error: 外部シンボル '_jpeg_stdio_src' が未解決(C:\CPP\JPEG_READ_TEST.OBJ が参照) Error: 外部シンボル '_jpeg_read_header' が未解決(C:\CPP\JPEG_READ_TEST.OBJ が参照) と出てしまいます。 libjpeg.libが認識されていないのだと思いますが解決方法が分かりません 知っている方がいたら教えてください

  • Borlandで組んだC+サンプルでエラーに

    borlandでc++のあるサイトのサンプルを動かそうとしたのですが、 C:\borland\work\stl_sample3>bcc32 stl_sample3.cpp Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland stl_sample3.cpp: エラー E2206 stl_sample3.cpp 22: 不正な文字 '$' (0x24)(関数 main() ) エラー E2206 stl_sample3.cpp 30: 不正な文字 '$' (0x24)(関数 main() ) エラー E2206 stl_sample3.cpp 33: 不正な文字 '$' (0x24)(関数 main() ) エラー E2206 stl_sample3.cpp 43: 不正な文字 '$' (0x24)(関数 main() ) エラー E2206 stl_sample3.cpp 45: 不正な文字 '$' (0x24)(関数 main() ) エラー E2206 stl_sample3.cpp 48: 不正な文字 '$' (0x24)(関数 main() ) *** 6 errors in Compile *** というエラーになりました。 22行目は map<string, vector<string> > $_POST; となっています。 もしかして、borland c++コンパイラでは$が使えないのでしょうか? VSでないとダメなのですか?

  • Cのコンパイルができない

    学生です 現在「C 入門の入門」という本を使ってC言語を勉強し始めています この中でプログラムのコンパイルにチャレンジするにあたり #include <sudio.h> main () { printf("C programming"); return 0; } というプログラムを書き、コマンドプロンプトから c:\Source>bcc32 sample.c と入力したのですが、 Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland sample.c: エラー E2209 sample.c 1: インクルードファイル 'sudio.h' をオープンできない 警告 W8065 sample.c 4: プロトタイプ宣言のない関数 'printf' の呼び出し(関数 main ) *** 1 errors in Compile *** と表示され、コンパイルに失敗しました 参考書によるとCコンパイラの設定ミスであり、bcc32.cfg と ilink32.cfg を設定を見直せと書いてあったので必死に見直したのですが、参考書に書いてあるミスのどれも当てはまらず、何度cfgファイルを書き直しても同じ結果になってしまいました ついでに書いてあったミスとは ・C:\Borland\bcc55にBinディレクトリは存在するか? ・cfgファイルは存在するか? ・ファイルの拡張子は問題ないか?表示されているか? ・記述内容は間違っていないか? の4点です いったい何が問題なのでしょうか? まったくわからないのですが、どなたか思いつく方がいらっしゃいましたらお願いします

  • condefs.hはどこにあるの?

    #include <stdio.h> #include <windows.h> #ifdef __BORLANDC__ #include <condefs.h> #endif をヘッダに含むプログラムspitest.cppを無償コンパイラのボーランドC++5.5でコンパイルすると Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland spitest.cpp: エラー E2209 spitest.cpp 8: インクルードファイル 'condefs.h' をオープンできない *** 1 errors in Compile *** とエラーがでました。 どうしたらいいのでしょうか?

  • リンク時エラー

    DirectShowのSampleGrabberを使ったプログラムをborland C++ コンパイラでコンパイルしようとしたときにエラーが出てしまいます。 bcc32 -I"C:\Borland\Bcc55\Include" -L"C:\Borland\Bcc55\Lib" -I"c:\Program Files\Microsoft Platform SDK\Include" -L"c:\Program Files\Microsoft Platform SDK\Lib" -L"C:\Program Files\Microsoft DirectX 9.0 SDK (October 2005)\Lib" -------------------------------------------------- Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル '_CLSID_SampleGrabber' が未解決(C:\CPP\DIRECTSHOW\CTHUMBNAI L.OBJ が参照) Error: 外部シンボル '_IID_ISampleGrabber' が未解決(C:\CPP\DIRECTSHOW\CTHUMBNAIL .OBJ が参照) Error: 外部シンボル '_MEDIATYPE_Video' が未解決(C:\CPP\DIRECTSHOW\CTHUMBNAIL.OB J が参照) Error: 外部シンボル '_MEDIASUBTYPE_RGB24' が未解決(C:\CPP\DIRECTSHOW\CTHUMBNAIL .OBJ が参照) Error: 外部シンボル '_FORMAT_VideoInfo' が未解決(C:\CPP\DIRECTSHOW\CTHUMBNAIL.O BJ が参照) DierctShowは最近Platform SDKに統合されたらしいのでPlatform SDKからインクルードしています。 ご存知の方がいらっしゃいましたらご教授お願い致します。

専門家に質問してみよう