0
代わりのIEEE浮動小数点加算
float a = 32.342 , b = 193.132
float total = a + b
どのように私は32ビットに変換し、明示的に32ビットを使用して追加することができますか?
代わりのIEEE浮動小数点加算
float a = 32.342 , b = 193.132
float total = a + b
どのように私は32ビットに変換し、明示的に32ビットを使用して追加することができますか?
私は(あなたが両方float
byte
に配列がこれらの配列を一緒を合計その後、変換したい)右のあなたを理解していれば、あなたはこのような何かを実装することができますのは、すべてのこれらのビットを見てみましょう(
// Initial floats
float a = 32.342f, b = 193.132f; // do not forget "f" suffix
float total = a + b;
// floats as byte[4] arrays
byte[] aArray = BitConverter.GetBytes(a);
byte[] bArray = BitConverter.GetBytes(b);
// let's compare actual float addition with arrays summation
byte[] totalArray = BitConverter.GetBytes(total);
// Add arrays directly: we may want to convert them into Int32,
// add up them up and, finally, convert back to array
// Reverse().ToArray(): we should take Ending into account
int c = unchecked(BitConverter.ToInt32(aArray.Reverse().ToArray(), 0) +
BitConverter.ToInt32(bArray.Reverse().ToArray(), 0));
byte[] cArray = BitConverter.GetBytes(c).Reverse().ToArray();
可視化):
private static String ToReport(byte[] data) {
return String.Join(" ", data.Select(x => Convert.ToString(x, 2).PadLeft(8, '0')));
}
...
String text = String.Join(Environment.NewLine,
$"a: {a,7} {ToReport(aArray)}",
$"b: {b,7} {ToReport(bArray)}",
$"a + b: {ToReport(cArray)}",
$"total: {total,7} {ToReport(totalArray)}");
Console.Write(text);
結果:
a: 32.342 00110101 01011110 00000001 01000010
b: 193.132 11001011 00100001 01000001 01000011
a + b: 00000000 01111111 01000010 10000101 // array + array
total: 225.474 01011000 01111001 01100001 01000011 // float + float
'float'はすでに** 32ビット**浮動小数点値です。実際に何をしたいですか? –
これらの32ビットを( 'byte [] array'として)取得したい場合は: 'byte [] array = BitConverter.GetBytes(a);' –
@ DmitryBychenko申し訳ありませんが残念です。私はそれらのバイト配列を要求していました、どのように追加を実行できますか? –