2012-04-19 8 views
1

利用可能な数式を使用してXYZ値をLAB *に変換しようとしていますhere数式の構文が正しくない

問題は、式を調べると、3つの変数var_X、var_Y、およびvar_Zの出力は常に1.00です。

wolfram alphaに値を入れると、実際には(おそらく)正しい出力が得られます(リンクの例は、この質問の下部にあるログに表示されているvar_Zの入力です)。

私が間違っている場所を見つけるのを助けてくれますか?ここで

は私のコードです:

-(NSArray*)convertXYZtoLABSpaceWithLABArray:(NSArray*)labArray{ 
    double var_X = [[labArray objectAtIndex:0] doubleValue]/95.047; 
    double var_Y = [[labArray objectAtIndex:1] doubleValue]/100.000; 
    double var_Z = [[labArray objectAtIndex:2] doubleValue]/108.883; 

    NSLog(@"convertXYZtoLAB... var_X: %f var_Y: %f var_Z: %f", var_X, var_Y, var_Z); 

    if (var_X > 0.008856){ 
     var_X = pow(var_X, (1/3)); 
    }else{      
     var_X = (7.787 * var_X) + (16/116); 
    } 

    if (var_Y > 0.008856){ 
     var_Y = pow(var_Y, (1/3)); 
    }else{ 
     var_Y = (7.787 * var_Y) + (16/116); 
    } 

    if (var_Z > 0.008856){ 
     var_Z = pow(var_Z, (1/3)); 
    }else{ 
     var_Z = (7.787 * var_Z) + (16/116); 
    } 

    NSLog(@"convertXYZtoLAB... var_X: %f var_Y: %f var_Z: %f", var_X, var_Y, var_Z); 

    NSNumber *l,*a,*b; 

    l = [NSNumber numberWithDouble:(116 * var_Y) - 16]; 
    a = [NSNumber numberWithDouble:500 * (var_X - var_Y)]; 
    b = [NSNumber numberWithDouble:200 * (var_Y - var_Z)]; 

    return([NSArray arrayWithObjects:l,a,b, nil]); 

} 

そして、ここでの方法では2つのログポイントで式の入力/出力されます:あなたはおそらく代わりに整数の除算を取得している

convertXYZtoLAB... var_X: 0.345393 var_Y: 0.502066 var_Z: 0.308145 
convertXYZtoLAB... var_X: 1.000000 var_Y: 1.000000 var_Z: 1.000000 
+0

代わりに[コードレビューサイト](http://codereview.stackexchange.com/)をお試しください。 – dasblinkenlight

答えて

3

浮動小数点除算。 1/3の代わりに1.0/3を試してください。1/3は整数計算でゼロに切り下げられます。

+1

3つは0乗になります。これは1.0です。 – lnafziger

関連する問題