2016-08-19 32 views
0

我正在嘗試修改一個關於強化學習的C程序https://webdocs.cs.ualberta.ca/~sutton/book/code/pole.c到Python參與OpenAI Gym。我複製了get_box功能到一個單獨的測試程序:帶有幾個條件語句的C代碼給出了意想不到的結果

#include <stdio.h> 

int get_box(float x, float x_dot, float theta, float theta_dot); 

int main() { 

    int box; 
    box = get_box(0.01, 0.01, 0.01, 0.01); 

    printf("The value of box is : %x\n", box); 

    return 0; 
} 

#define one_degree 0.0174532 /* 2pi/360 */ 
#define six_degrees 0.1047192 
#define twelve_degrees 0.2094384 
#define fifty_degrees 0.87266 

int get_box(x,x_dot,theta,theta_dot) 
float x,x_dot,theta,theta_dot; 
{ 
    int box=0; 

    if (x < -2.4 || 
     x > 2.4 || 
     theta < -twelve_degrees || 
     theta > twelve_degrees)   return(-1); /* to signal failure */ 

    if (x < -0.8)    box = 0; 
    else if (x < 0.8)    box = 1; 
    else        box = 2; 

    if (x_dot < -0.5)    ; 
    else if (x_dot < 0.5)    box += 3; 
    else       box += 6; 

    if (theta < -six_degrees)   ; 
    else if (theta < -one_degree)  box += 9; 
    else if (theta < 0)    box += 18; 
    else if (theta < one_degree)   box += 27; 
    else if (theta < six_degrees)  box += 36; 
    else       box += 45; 

    if (theta_dot < -fifty_degrees) ; 
    else if (theta_dot < fifty_degrees) box += 54; 
    else         box += 108; 

    return(box); 
} 

,我稱之爲scratch.c。如果我gcc scratch.c -lm編譯這個程序,並與./a.out運行它,我得到下面的打印輸出:

The value of box is : 55 

但是,如果我去通過條件語句手動我希望得到1 + 3 + 27 + 54 = 85,這也是我用Python程序得到的結果。爲什麼程序打印55?

+4

這是提交給模糊比賽嗎?大部分問題在於特質縮進風格。 – Bathsheba

+0

#define值不是大寫字母,條件語句後沒有括號,當if/else中有多個條件時,沒有圍繞所有條件的括號...不確定我想試着理解那段代碼。 – Tim

+0

舊式K&R函數定義不支持'float'參數。取而代之的是'double'參數被傳遞,然後被拋棄。在原型中使用'float'而不是'double'是未定義的行爲。 – a3f

回答

3

如果你要做一個printf("%d\n", box)而不是printf("%x\n", box)你會得到打印的十進制值。 0x55 = 5 * 16 + 5 = 85

-1

因爲您的輸出轉換爲十六進制數。如果你將55轉換爲十進制,那麼它相當於85.

相關問題