2012-05-07 7 views
0

私のMacパーティションでcプログラムを動作させようとしていますが、その方法の大半はわかっていますが、非常に単純な問題はありません。Mac OS Xで2つの変数名を掛ける

ので、私はすべての私の変数を宣言し、私の​​.cファイルに私は正しい答えを得ることはありませんしかし

L2toL1 = (L2_transfer_time)*(L1_block_size); 

のようなコマンドを実行しようとしています.hファイルを持っています。私は上記の行の前に変数を表示し、それらは正しく印刷されますが、一緒に掛け合わされたときの答えは途方もないものです。どうすれば正しい乗算を達成できますか?

.hファイルが.cのファイルは、次を実行し、印刷のFステートメントに設定ファイル から特定の値に答えを読み取ることは195でなければなりません

#define CONFIG_PARAM 16 
#define HIT 1 
#define MISS 0 
#define TRUE 1 
#define FALSE 0 

unsigned long long L2=0; 
unsigned long long L1=0; 

int L1_block_size=0; 
int L1_cache_size=0; 
int L1_assoc=0; 
int L1_hit_time=0; 
int L1_miss_time=0; 
int L2_block_size=0; 
int L2_cache_size=0; 
int L2_assoc=0; 
int L2_hit_time=0; 
extern int L2_miss_time=0; 
int L2_transfer_time=0; 
int L2_bus_width=0; 
int mem_sendaddr=0; 
int mem_ready=0; 
int mem_chunktime=0; 
int mem_chunksize=0; 
unsigned long long test; 

のように見えますが、その49567のような助けのための

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
#include "definitions.h" 

int main(int argc, char *argv[]) { 
    FILE *config_file, *trace; 
    unsigned int address, exec_info; 
    char check, trash[25], op; 
    int j, para; 
    int i=0; 

    if(argc >= 2) 
    config_file = fopen(argv[1],"r"); 
    else 
    config_file = fopen("config0.txt","r"); 

// Grabs desired cache parameters from the specified config files 
while(fscanf(config_file,"%s %d\n",trash,&para) == 2) { 
config[i] = para; 
i++;  
} 

// Close the config file 
fclose(config_file); 

// Puts Cache parameters from config file in desired variables 
InitializeParameters(); 

/* 
unsigned long long L2toL1; 
L2toL1 = (L2_miss_time)*(L1_block_size); 
printf("L2toL1 is: %Lu\n",L2toL1); 

} 

int InitializeParameters() { 
L1_cache_size = config[0]; 
L1_block_size = config[1]; 
L1_assoc = config[2]; 
L1_hit_time = config[3]; 
L1_miss_time = config[4]; 
L2_block_size = config[5]; 
L2_cache_size = config[6]; 
L2_assoc = config[7]; 
L2_hit_time = config[8]; 
L2_miss_time = config[9]; 
L2_transfer_time = config[10]; 
L2_bus_width = config[11]; 
mem_sendaddr=config[12]; 
mem_ready=config[13]; 
mem_chunktime=config[14]; 
mem_chunksize=config[15];  
} 

おかげで、あなたの結果は先の変数に収まらないので、あなたは、おそらく不思議数を取得している

+0

入力とは何ですか?あなたは何を得ていますか? –

+3

完全な例を示してください(すべての変数、印刷ステートメント、および使用している値の完全な定義を含む)。 –

+0

値は何ですか?あなたはオーバーフローが起こっていないと確信していますか? – Spidey

答えて

1

。例:宛先メモリの場所に収まらないほど大きい2つの数値を乗算しています。あなたは、コードのこの部分を持っている場合

例、:

#include <stdio.h> 
int main(int argc, char **argv) 
{ 
    int a, b, c; 
    a = 2000000000; 
    b = 2000000000; 
    c = a*b; 
    printf ("%d x %d = %d", a, b, c); 
    return 0; 
} 

が印刷されます:

2000000000 x 2000000000 = -1651507200 

はこのことを言って、それはヘッダファイルにあなたの変数を宣言するのは良い考えではありません。

+0

これは、乗算される数値が32と6の場合には当てはまりません – Sean

0

printf形式の文字列に%Luを使用しています。私はLlong doubleタイプにのみ適用され、long long intタイプには適用されないと考えます。

あなたはこのよう%lluを使用する必要があります。すべてではないが、適切に標準に準拠しており、あなたのは、何か他のものを使用することがあります。もちろん

printf("L2toL1 is: %llu\n",L2toL1); 

を、それはあなたが使用しているCライブラリ依存します。

関連する問題