IEEE754で定義されてる2をきすうとしたケチ表現でdoubleからbyte配列及びlong/ulongに変換及び逆変換したいです。
順番は、sign,exponent,fractionの順番です。
リストにまとめます。
IEEE754
ケチ表現
sign,exponent,fractionの順番
doubleからlong,byte配列及び逆変換
追記3
ひつようなりゆうは、unityでげーむをつくっているときにmodを作るためのげんごのじっそうのためです。
追記2
不備が多くてごめんなさい。
long,byte配列からのはできました。
c#
1public double to_double(ulong a){ 2 double c = (((a & (0x7FF << 52))>>52) - 0x400); 3 return (((a & (1UL << 63)) < 0) ? 1 : -1) * 4 (c > 0 ? ((b(a,11) + 1) * Math.Pow(2, c)) 5 : c < 0 ? (b(a,11) + 1) / Math.Pow(2, c) 6 : (b(a,11) + 1)); 7} 8public double to_double(byte[8] a){ 9 return b((a[7]*Math.Pow(2, 0)) + (a[6]*Math.Pow(2, 8)) + (a[5]*Math.Pow(2, 16)) + (a[4]*Math.Pow(2, 24)) + (a[3]*Math.Pow(2, 32)) + (a[2]*Math.Pow(2, 40)) + (a[1]*Math.Pow(2, 48)) + (a[0]*Math.Pow(2, 56))); 10} 11double double_decmial(ulong a, int x){ 12 if(x != 11){ 13 return (((a & (ulong)Math.Pow(2, x))<<x) * 2 / (ulong)(12-x)) + b(a,x-1); 14 }else{ 15 return 0; 16 } 17}
また、複数の問題があるので、しつもんをとりさげたいとおもってます。
追記1
①これはどこの課題でもありません。
②fraction部の小数を作るところで戸惑ってます。
できてる範囲は
((a & (1L << 63L)) ? 1 : -1) * ((a & (0x7FF << 52))>>52)
こんな感じです
回答2件
あなたの回答
tips
プレビュー