アプリ版:「スタンプのみでお礼する」機能のリリースについて

本に載っていたソースなんですが,外部シンボル 'drand48()' が未解決(C:\NYU.OBJ が参照)というエラーが出てなかなかコンパイルできません。drand48という関数はstdlib.hに含まれていると思うのですが,何故だか分かりません。どなたか分かる方,是非ともお力をお貸しください。

環境はbcc55です。元のソースはC++Builder4で作られたそうです。字数の関係ですべて載せることができませんが,よろしくお願いします!

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <locale.h>
#include <stdlib.h>

#define Iunits 14
#define Hunits 200
#define Ounits 2

#define Rlow -0.30
#define Rhigh 0.30
#define A 1.4
#define B 0.3

#define fout(x) ( 1 / (1 + exp( -(x) ) ))
#define urand() ( drand48() * (Rhigh - Rlow) + Rlow )


~中略

void initialize()/*各ユニットに乱数で重みを振り当てる*/
{
int i,j;

for (i = 0; i < Hunits; i++){
for (j = 0; j < Iunits; j++){
wih[i][j] = urand();
}
shikiih[i] = urand();
}

for (i = 0; i < Ounits; i++){
for (j = 0; j < Hunits; j++){
who[i][j] = urand();
}
shikiio[i] = urand();
}
}


~少略

A 回答 (3件)

drand48?そんな関数名は無いと思ったけど…


標準の関数じゃないのは確かだね。スペルミスってことはないよね?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。スペルミスということはないです。

お礼日時:2006/01/02 13:17

drand48はUNIX/Linux系の関数です。


どんなコンパイラ(ライブラリ)でも提供されるものではないでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。UNIX/LINUX系ですか・・・。度々質問して申し訳ないのですががなんとかwindowsでできないでしょうか?

お礼日時:2006/01/02 13:22

> なんとかwindowsでできないでしょうか?



↓これでいかがでしょ。

static long long x=0x1234ABCD330E;

double drand48() /* 0.0以上1.0未満 */
{
x = x*0x5DEECE66D + 0xB;
return (x&0xFFFFFFFFFFFF)*(1.0/281474976710656.0);
}

long lrand48() /* 0以上2147483647以下 */
{
x = x*0x5DEECE66D + 0xB;
return(long)(x>>17)&0x7FFFFFFF;
}

long mrand48() /* -2147483648以上214748367以下 */
{
x = x*0x5DEECE66D + 0xB;
return(long)(x>>16)&0xFFFFFFFF;
}

void srand48(long s)
{
x = s;
x = (x<<16)+0x330E;
}
    • good
    • 0
この回答へのお礼

なんとかコンパイルできました。まだ問題が発生してexeファイルは実行できませんが,もう一度全体を見直してみます。ありがとうございました!

お礼日時:2006/01/02 15:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!