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}
で、しつもんはなんでしょうか
elseが実行されません。どうすればいいでしょうか?
double swap(int a, int b)
{
int temp;
a = temp;
a = b;
b = temp;
}
swapしていないし、戻り値も返していません。
コンパイル・エラーにならないんですか?
コンパイルエラーになりませんでした。
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
ありがとうございます。
回答1件
あなたの回答
tips
プレビュー