質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

566閲覧

c(x, eta)=exp(-beta*delta_E)が計算されるようにしたい。

Okuhira007

総合スコア13

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/10/12 10:42

編集2020/10/12 11:46

cの値が1.00となってしまいます。
問題点がなかなか見つかりません。
c(x, eta) =1.00となり、elseが機能していない。なぜかがわからない。

c言語

1コード 2#include <stdio.h> 3#include <math.h> 4#include <stdlib.h> //for rand() srand() 5#define L 4 //total site number 6#define N 2 //total particle numer 7 8double swap(int a, int b) 9{ 10 int temp; 11 12 a = temp; 13 a = b; 14 b = temp; 15 return 0; 16} 17 18double H(int eta[]) //definition of hamiltonian 19{ 20 int i; 21 double Hami = 0.0; 22 23 eta[0] = eta[L]; 24 for (i=0;i<L;i++) { 25 Hami = Hami - eta[i]*eta[i+1]; 26 } 27 if (Hami == 0) 28 { 29 return 1; 30 } 31 return Hami; 32} 33 34double c(int x, int eta[]) // definition of exchangable probability 35{ 36 double delta_E, beta, temp_H; 37 double swap(int, int); 38 double H(int eta[]); 39 40 beta = 1.0; 41 temp_H = H(eta); 42 swap(eta[x], eta[x+1]); 43 delta_E = H(eta) - temp_H; 44 if (delta_E < 0) { 45 return (1); 46 } else 47 { 48 return (exp(-beta*delta_E)); 49 } 50 51} 52 53int main() 54{ 55 int eta[L+1] = {0}; 56 int x = 2; 57 58 eta[1] = 1; 59 eta[2] = 1; 60 printf("%f\t%f\n", H(eta), c(x, eta)); 61}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/10/12 10:46

で、しつもんはなんでしょうか
Okuhira007

2020/10/12 11:03

elseが実行されません。どうすればいいでしょうか?
episteme

2020/10/12 11:39

double swap(int a, int b) { int temp; a = temp; a = b; b = temp; } swapしていないし、戻り値も返していません。 コンパイル・エラーにならないんですか?
Okuhira007

2020/10/12 11:42

コンパイルエラーになりませんでした。
mjk

2020/10/12 11:42

https://paiza.io/projects/48zh1QazUKDKwa4WFNZ81g プログラム実行途中のデバッグなどは試してみましたか? プログラム実行途中にprintfで各変数などを出力してみましたが、コードの通り実行されているように思います。 何を求めているプログラムなのかや、期待する結果や途中の値など手元で計算出来る例など提示すると回答が得られやすいと思いました。 H(eta) -1.000000 temp_H -1.000000 delta_E 0.000000 delta_E < 0 : false exp(-beta*delta_E) 1.000000 H(eta) -1.000000 c(x, eta) 1.000000
Okuhira007

2020/10/12 11:44

ありがとうございます。
guest

回答1

0

ベストアンサー

答えが合うかどうかは知らないが、
double swap(int *a, int *b)
{
int temp;

temp = *a; *a = *b; *b = temp; return 0;

}
と、
double swap(int *, int *);
と、
swap(&eta[x], &eta[x+1]);
あたりは変える必要がありますね。

投稿2020/10/13 10:36

PingHermit

総合スコア478

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Okuhira007

2020/10/13 10:51

ありがとうございます。直りました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問