掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.23768

複素数関数の実部・虚部へのポインタ
投稿者---やっさん(2005/10/21 15:38:02)


C++で複素数を使っています.

#include <iostream>
#include <complex>

using namespace std;

complex<double> f(double x)
{
    return complex<double>(2*x, x);
}

double g(double x)
{
    return 2*x;
}


double func_3(double (*func)(double), double b)
{
    return func(b);
}


int main(void)
{
    cout << real(f(2.0)) << endl;
    cout << g(2.0) << endl;

    cout << func_3(g, 2.0) << endl;
            
    return 0;
}



以上のようなプログラムで
メインの5行目のように func_3() に g() のポインタを渡すことができるのですが,
func_3() に f() の実部・虚部だけのポインタを渡して
func_3(g, 2.0) と同じように扱うにはどうすればよいのでしょうか?

よろしくお願いします.


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:複素数関数の実部・虚部へのポインタ 23769 REE 2005/10/21 16:10:03


No.23769

Re:複素数関数の実部・虚部へのポインタ
投稿者---REE(2005/10/21 16:10:03)


>func_3() に f() の実部・虚部だけのポインタを渡して
>func_3(g, 2.0) と同じように扱うにはどうすればよいのでしょうか?
>
>よろしくお願いします.

他にも方法はあるかもしれませんが、

double f_real(double x)
{
return f(x).real();
}

を作って代わりに渡すのが簡単でしょう?
f(x)のようなものが多数あるなら、テンプレートを使うのもありです。


この投稿にコメントする

削除パスワード

No.23772

Re:複素数関数の実部・虚部へのポインタ
投稿者---やっさん(2005/10/21 16:46:45)


回答ありがとうございます.
>double f_real(double x)
>{
> return f(x).real();
>}

と同じような方法で
double f_real(double x)
{
     return 2*x;
}

double f_imag(double x)
{
     return x;
}

と別々に定義してしまう方法は考えてました.
やっぱりこれらの方法が簡単で早くていいですかねぇ?


この投稿にコメントする

削除パスワード

No.23774

Re:複素数関数の実部・虚部へのポインタ
投稿者---REE(2005/10/21 17:21:35)


>と同じような方法で

>と別々に定義してしまう方法は考えてました.

f()も残すのであれば、同じようでもかなり違います。
下の例では、f()とf_real(),f_imag()の整合を常に取らなくてはいけません。

>やっぱりこれらの方法が簡単で早くていいですかねぇ?

f()の様な関数が一つならこれで十分でしょう。
複数ある場合は、テンプレートも選択肢に入ります。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧