2012-01-11 19 views
1

Visual Basicで書かれたソースコードのC++での翻訳に関する問題に直面しています。コードではSign(VB)メソッドとfloatから整数への様々な変換への呼び出しがあります... 1、2、3のC++コードがVBと同じであることを確認できますか?暗黙的な変換に加えて、変換がどのように実行されるかはわかりません(4を参照)。何か案が?Visual BasicからC++へのコードの移動

1)方法サイン(Visual Basicの)

//C++ 
int sign(float value) 
{ 
    if (value < 0) return -1; 
    else if (value == 0) return 0; 
    else return 1; 
} 

2)方法のInt(Visual Basicの)

//C++ 
int Int(float value) 
{ 
    return ((value >= 0) ? value : floor(value)); 
} 

3)方法CInt関数(Visual Basicの)

//C++ 
int CInt(const float val) 
{ 
    float x = fabs(val - (int)val); 

    if (fabs(x - 0.5) < 0.0001) 
      return (int)val; 
    else 
      return (int)(val+(val>=0.0?0.5:-0.5)); 
} 

4)また、intからdoubleへの暗黙の変換もあります。この変換をC++で行う方法は?これは、同じ、浮動小数点値は、(この例では、0)定数変数と比較されるべきではないれていない

+1

まあ、いいえ、VBはオーバーフロー例外を生成します。テストを書いて、幸せになるまで結果を比較してください。 –

答えて

0

1- 予め

//Visual basic 
Dim dt As Integer = -99.2 

おかげでき、。したがって、これはより良いコードです。

const float epsilon = 0.00001f; 

if(value < -epsilon) return -1; 
if(value > epsilon) return 1; 
return 0; 

2これは、たとえば-5.7など必要なものによって異なります。 -5を望むなら、(int)を使ってキャストしてください。たとえば、fという名前のfloat変数がある場合は、(int)fを使用します。あなたが-6をしたい場合は、この関数を使用します。

int Int(float value) 
{ 
    return ((value >= 0) ? (int)value : (int)(value-1)); 
} 

3 - それが動作するはずですが、最後のreturn文を作ることができる明確:

return (int)val + (val>=0.0?1:-1) 

、4-ダブルスCに浮かぶのは非常に非常によく似ています/ C++。あたかも二重ではなく、浮動小数点を使っているかのようにしてください。

+0

返信いただきありがとうございます、私は明確であるかどうかはわかりませんが、私のメソッドはVisual Basicのメソッドと全く同じ動作をしています。 Visual Basicメソッドの動作についてはわかりません。 Cintは銀行家が丸めているようだ。 –

関連する問題