--- /dev/null
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace flp
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ try
+ {
+ if (Environment.NewLine != "\r\n")
+ Console.WriteLine("エラー:改行文字列として\r\nが定義されていないので,プログラムは実行しません。");
+ else
+ for (long l = 0; l < args.LongLength; l++)
+ {
+ switch (args[l])
+ {
+ case "/s":
+ case "/S": df = false; break;
+ case "/d":
+ case "/D": df = true; break;
+ case "/?":
+ if (b1)
+ {
+ Console.WriteLine("\r\n16桁,または8桁の16進数をIEEE754規格で表現された浮動小数点数として,正確な10進数での値と,ulp(unit in the last place)を表示します。\r\n");
+ Console.WriteLine("FLP [/D | /S] [/1~4294967295]\r\n");
+ Console.WriteLine("\t/D\t倍精度形式(64ビット double)の値を表示します。");
+ Console.WriteLine("\t/S\t単精度形式(32ビット float)の値を表示します。上と合わせて\r\n\t\tこの2つが省略された場合は/Dが指定されているとみなします。");
+ Console.WriteLine("\t/1~4294967295\t1から4294967295の整数でリダイレクトまたはパイプの\r\n\t\t\t場合に出力する最大行数を指定します。\r\n\t\t\t省略した場合は最大256行とみなされます。");
+ b1 = false;
+ }
+ break;
+ default:
+ if (args[l][0] == '/')
+ {
+ bool bf1 = false;
+ for (int i = 1; i < args[l].Length; i++)
+ if (args[l][i] < 0x30 || args[l][i] > 0x39)
+ {
+ bf1 = false;
+ break;
+ }
+ else
+ bf1 = true;
+ try
+ {
+ if (bf1)
+ if ((ui2 = UInt32.Parse(args[l].Substring(1))) != 0)
+ ui1 = ui2;
+ }
+ catch (Exception)
+ {
+ }
+ }
+ break;
+ }
+ }
+ while (b1)
+ {
+ a();
+ }
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine(e.Message);
+ }
+ }
+ static void a()
+ {
+ try
+ {
+ int i;
+ Console.WriteLine();
+ for (i = 0; i < 254; i++)
+ {
+ ir = Console.In.Read();
+ if (ir == -1)
+ {
+ b1 = false;
+ break;
+ }
+ cr[i] = (char)ir;
+ if (cr[i] == '\r')
+ {
+ ir = Console.In.Read();
+ if (ir == -1)
+ {
+ b1 = false;
+ break;
+ }
+ if ((cr[i + 1] = (char)ir) == '\n')
+ {
+ if ((Console.In.Peek() != -1) || (counter != 0))
+ counter++;
+ break;
+ }
+ else
+ i++;
+ }
+ }
+ if (counter > ui1)
+ {
+ Console.WriteLine("リダイレクト、パイプの場合は{0}行しか読み込みません。", ui1);
+ b1 = false;
+ }
+ else if ((i < 254) && b1)
+ //このブロックに動作させるプログラムを入れる
+ {
+ string str = new String(cr, 0, i);
+ if (counter > 0)
+ Console.WriteLine(str);
+ if (df)
+ b(UInt64.Parse(str, System.Globalization.NumberStyles.HexNumber));
+ else
+ c(UInt32.Parse(str, System.Globalization.NumberStyles.HexNumber));
+ }
+ else if (b1)
+ {
+ Console.WriteLine("エラー:1行の文字数が多すぎる場合、プログラムを終了します。");
+ b1 = false;
+ }
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine(e.Message);
+ }
+
+ }
+ static void b(ulong ul1)
+ {
+ ushort us1 = (ushort)((ul1 << 1) >> 53);
+ s = (ul1 >> 63) == 0 ? true : false;
+ if (us1 < 1023)
+ {
+ ula2syokika();
+ if ((ul1 << 1) != 0)
+ {
+ ushort us2 = (ushort)1022;
+ if (us1 != 0)
+ {
+ five(us2 = (ushort)(1023 - us1), true);
+ ten(52);
+ ula2niula1wotasu();
+ }
+ ulong ul2 = ul1 & 0xfffffffffffff;
+ for (int i = 1; i < 53; i++)
+ {
+ if ((ul2 & (0x10000000000000ul >> i)) > 0)
+ {
+ five((ushort)(us2 + i), true);
+ ten((byte)(52 - i));
+ ula2niula1wotasu();
+ }
+ }
+ Console.WriteLine("e{0}", -53 - us2 + (ula2noks = ulanoketasuu(by2, ula2)));
+ //これはula2の一番最初の数字に小数点をつけたときのeの値
+ ula2hyouji();
+ //これは値の表示
+ five((ushort)(us2 + 52), true);
+ ulphyouji();
+ //ulp(unit in the last place)の値を表示する。
+ }
+ else if ((ul1 >> 63) > 0)
+ Console.WriteLine("-0");
+ else
+ Console.WriteLine("+0");
+ }
+ else if (us1 < 1075)
+ {
+ Console.WriteLine("e0");
+ ula2syokika();
+ int id, ula2zerokazuwaru18;
+ two(id = us1 - 1023);
+ ula2niula1wotasu();
+ ulong ul2 = ul1 & 0xfffffffffffff;
+ for (int i = 1; i < id + 1; i++)
+ {
+ if ((ul2 & (0x10000000000000ul >> i)) > 0)
+ {
+ two(id - i);
+ ula2niula1wotasu();
+ }
+ }
+ if (!s)
+ Console.Write("-");
+ Console.Write(ula2[by2]);
+ for (int i = by2 - 1; i > -1; i--)
+ zerotsukihyouji(ula2[i]);
+ Console.WriteLine(".");
+ ula2syokika();
+ for (int i = 1; i < 53 - id; i++)
+ if ((ul2 & (0x10000000000000ul >> (i + id))) > 0)
+ {
+ five((ushort)i, true);
+ ten((byte)(52 - id - i));
+ ula2niula1wotasu();
+ }
+ if (by2 == 0 && ula2[0] == 0)
+ Console.WriteLine("0");
+ else
+ {
+ ula2zerokazuwaru18 = ulanozerokazu(ula2) / 18;
+ zerohyouji(52 - id - ulanoketasuu(by2, ula2));
+ if (by2 != ula2zerokazuwaru18)
+ {
+ Console.Write(ula2[by2]);
+ int i;
+ for (i = by2 - 1; i > ula2zerokazuwaru18; i--)
+ zerotsukihyouji(ula2[i]);
+ zerohyouji(18 - ketasuu(ula2[ula2zerokazuwaru18]));
+ Console.WriteLine(zerotoru(ula2[ula2zerokazuwaru18]));
+ }
+ else
+ Console.WriteLine(zerotoru(ula2[by2]));
+ }
+ //ここからulp表示
+ five((ushort)(52 - id), true);
+ ulphyouji2(id, 52);
+ }
+ else if (us1 < 2047)
+ {
+ ula2syokika();
+ int id;
+ two(id = us1 - 1023);
+ ula2niula1wotasu();
+ ulong ul2 = ul1 & 0xfffffffffffff;
+ for (int i = 1; i < 53; i++)
+ {
+ if ((ul2 & (0x10000000000000ul >> i)) > 0)
+ {
+ two(id - i);
+ ula2niula1wotasu();
+ }
+ }
+ short s0, s1;
+ Console.WriteLine("integer {0} figures", s0 = ulanoketasuu(by2, ula2));
+ if (!s)
+ Console.Write("-");
+ Console.Write(ula2[by2]);
+ for (int i = by2 - 1; i > -1; i--)
+ zerotsukihyouji(ula2[i]);
+ Console.WriteLine();
+ two(id - 52);
+ Console.WriteLine("unit in the last place");
+ if (!s)
+ Console.Write(" ");
+ for (int i = 0; i < (s0 - (s1 = ulanoketasuu(by1, ula1))); i++)
+ Console.Write(" ");
+ Console.Write(ula1[by1]);
+ for (int i = by1 - 1; i > -1; i--)
+ zerotsukihyouji(ula1[i]);
+ Console.WriteLine();
+ Console.WriteLine("{0} figures", s1);
+ }
+ else
+ {
+ if ((ul1 << 12) != 0)
+ Console.WriteLine("NaN");
+ else if ((ul1 >> 63) == 0)
+ Console.WriteLine("+∞");
+ else
+ Console.WriteLine("-∞");
+ }
+ }
+ static void c(uint ufi1)
+ {
+ byte byt1 = (byte)((ufi1 << 1) >> 24);
+ s = (ufi1 >> 31) == 0 ? true : false;
+ if (byt1 < 127)
+ {
+ ula2syokika();
+ if ((ufi1 << 1) != 0)
+ {
+ ushort us2 = 126;
+ if (byt1 != 0)
+ {
+ five(us2 = (ushort)(127 - byt1), true);
+ ten(23);
+ ula2niula1wotasu();
+ }
+ uint ul2 = ufi1 & 0x7fffff;
+ for (int i = 0; i < 24; i++)
+ {
+ if ((ul2 & (0x800000u >> i)) > 0)
+ {
+ five((ushort)(us2 + i), true);
+ ten((byte)(23 - i));
+ ula2niula1wotasu();
+ }
+ }
+ Console.WriteLine("e{0}", -24 - us2 + (ula2noks = ulanoketasuu(by2, ula2)));
+ //これはula2の一番最初の数字に小数点をつけたときのeの値
+ ula2hyouji();
+ //これは値の表示
+ five((ushort)(us2 + 23), true);
+ ulphyouji();
+ //ulp(unit in the last place)の値を表示する。
+ }
+ else if ((ufi1 >> 31) > 0)
+ Console.WriteLine("-0");
+ else
+ Console.WriteLine("+0");
+ }
+ else if (byt1 < 150)
+ {
+ Console.WriteLine("e0");
+ ula2syokika();
+ int id;
+ two(id = byt1 - 127);
+ ula2niula1wotasu();
+ uint ui = ufi1 & 0x7fffff;
+ for (int i = 1; i < id + 1; i++)
+ {
+ if ((ui & (0x800000u >> i)) > 0)
+ {
+ two(id - i);
+ ula2niula1wotasu();
+ }
+ }
+ if (!s)
+ Console.Write("-");
+ Console.Write(ula2[by2]);
+ for (int i = by2 - 1; i > -1; i--)
+ zerotsukihyouji(ula2[i]);
+ Console.WriteLine(".");
+ ula2syokika();
+ for (int i = 1; i < 24 - id; i++)
+ if ((ui & (0x800000u >> (i + id))) > 0)
+ {
+ five((ushort)i, true);
+ ten((byte)(23 - id - i));
+ ula2niula1wotasu();
+ }
+ if (by2 == 0 && ula2[0] == 0)
+ Console.WriteLine("0");
+ else
+ {
+ int ula2zerokazuwaru18 = ulanozerokazu(ula2) / 18;
+ zerohyouji(23 - id - ulanoketasuu(by2, ula2));
+ if (by2 != ula2zerokazuwaru18)
+ {
+ Console.Write(ula2[by2]);
+ int i;
+ for (i = by2 - 1; i > ula2zerokazuwaru18; i--)
+ zerotsukihyouji(ula2[i]);
+ zerohyouji(18 - ketasuu(ula2[ula2zerokazuwaru18]));
+ Console.WriteLine(zerotoru(ula2[ula2zerokazuwaru18]));
+ }
+ else
+ Console.WriteLine(zerotoru(ula2[by2]));
+ }
+ //ここからulp表示
+ five((ushort)(23 - id), true);
+ ulphyouji2(id, 23);
+ }
+ else if (byt1 < 255)
+ {
+ ula2syokika();
+ int id;
+ two(id = byt1 - 127);
+ ula2niula1wotasu();
+ uint ui = ufi1 & 0x7fffff;
+ for (int i = 1; i < 24; i++)
+ {
+ if ((ui & (0x800000u >> i)) > 0)
+ {
+ two(id - i);
+ ula2niula1wotasu();
+ }
+ }
+ short s0, s1;
+ Console.WriteLine("integer {0} figures", s0 = ulanoketasuu(by2, ula2));
+ if (!s)
+ Console.Write("-");
+ Console.Write(ula2[by2]);
+ for (int i = by2 - 1; i > -1; i--)
+ zerotsukihyouji(ula2[i]);
+ Console.WriteLine();
+ two(id - 23);
+ Console.WriteLine("unit in the last place");
+ if (!s)
+ Console.Write(" ");
+ for (int i = 0; i < (s0 - (s1 = ulanoketasuu(by1, ula1))); i++)
+ Console.Write(" ");
+ Console.Write(ula1[by1]);
+ for (int i = by1 - 1; i > -1; i--)
+ zerotsukihyouji(ula1[i]);
+ Console.WriteLine();
+ Console.WriteLine("{0} figures", s1);
+ }
+ else
+ {
+ if ((ufi1 << 9) != 0)
+ Console.WriteLine("NaN");
+ else if ((ufi1 >> 31) == 0)
+ Console.WriteLine("+∞");
+ else
+ Console.WriteLine("-∞");
+ }
+ }
+ static void two(int jou)
+ {
+ ula1[0] = 1;
+ for (int i = 1; i < 60; i++)
+ ula1[i] = 0;
+ by1 = 0;
+ for (int j = 0; j < jou; j++)
+ {
+ for (int i = 0; i < (by1 + 1); i++)
+ ula1[i] *= 2;
+ for (int i = 0; i < by1; i++)
+ {
+ if (ula1[i] > 999999999999999999)
+ {
+ ula1[i + 1] += ula1[i] / 1000000000000000000;
+ ula1[i] %= 1000000000000000000;
+ }
+ }
+ if (ula1[by1] > 999999999999999999)
+ {
+ ula1[by1 + 1] += ula1[by1] / 1000000000000000000;
+ ula1[by1] %= 1000000000000000000;
+ by1++;
+ }
+ }
+ }
+ static void five(ushort jou, bool b)
+ {
+ if (b)
+ {
+ ula1[0] = 1;
+ for (int i = 1; i < 60; i++)
+ ula1[i] = 0;
+ by1 = 0;
+ }
+ for (int j = 0; j < jou; j++)
+ {
+ for (int i = 0; i < (by1 + 1); i++)
+ ula1[i] *= 5;
+ for (int i = 0; i < by1; i++)
+ {
+ if (ula1[i] > 999999999999999999)
+ {
+ ula1[i + 1] += ula1[i] / 1000000000000000000;
+ ula1[i] %= 1000000000000000000;
+ }
+ }
+ if (ula1[by1] > 999999999999999999)
+ {
+ ula1[by1 + 1] += ula1[by1] / 1000000000000000000;
+ ula1[by1] %= 1000000000000000000;
+ by1++;
+ }
+ }
+ }
+ static void ten(byte jou)
+ {
+ byte b2, b3;
+ if ((b2 = (byte)(jou / 18)) != 0)
+ {
+ for (int i = by1; i > -1; i--)
+ ula1[i + b2] = ula1[i];
+ for (int i = (b2 - 1); i > -1; i--)
+ ula1[i] = 0;
+ by1 += b2;
+ }
+ if ((b3 = (byte)(jou % 18)) != 0)
+ {
+ ulong ul1 = tenjou((byte)(18 - b3));
+ ulong ul2 = tenjou(b3);
+ ulong ul3;
+ if ((ul3 = (ula1[by1] / ul1)) > 0)
+ ula1[by1 + 1] += ul3;
+ ula1[by1] = (ula1[by1] % ul1) * ul2;
+ for (int i = (by1 - 1); i >= b2; i--)
+ {
+ ula1[i + 1] += ula1[i] / ul1;
+ ula1[i] = (ula1[i] % ul1) * ul2;
+ }
+ if (ul3 > 0)
+ by1++;
+ }
+ }
+ static void ula2syokika()
+ {
+ for (int i = 0; i < 60; i++)
+ {
+ ula2[i] = 0;
+ }
+ by2 = 0;
+ }
+ static void ula2niula1wotasu()
+ {
+ for (int i = 0; i < by1; i++)
+ {
+ ula2[i] += ula1[i];
+ if (ula2[i] > 999999999999999999)
+ {
+ ula2[i + 1] += ula2[i] / 1000000000000000000;
+ ula2[i] %= 1000000000000000000;
+ }
+ }
+ ula2[by1] += ula1[by1];
+ if (ula2[by1] > 999999999999999999)
+ {
+ ula2[by1 + 1] += ula2[by1] / 1000000000000000000;
+ ula2[by1] %= 1000000000000000000;
+ if (by2 <= by1)
+ by2 = (byte)(by1 + 1);
+ }
+ else if (by2 < by1)
+ by2 = by1;
+ }
+ static ulong tenjou(byte jou)
+ {
+ ulong ul1 = 1;
+ for (int i = 0; i < jou; i++)
+ {
+ ul1 *= 10;
+ }
+ return ul1;
+ }
+ static short ulanoketasuu(byte byA, ulong[] ulaA)
+ {
+ int i;
+ ulong ul1 = ulaA[byA];
+ for (i = 1; ul1 > 9; i++)
+ ul1 /= 10;
+ return (short)(18 * byA + i);
+ }
+ static short ulanozerokazu(ulong[] ulaA)
+ {
+ int i = 0;
+ while (ulaA[i] == 0)
+ i++;
+ ulong ulA = ulaA[i];
+ int j;
+ for (j = 0; ulA % 10 == 0; j++)
+ ulA /= 10;
+ return (short)(i * 18 + j);
+ }
+ static void ula2hyouji()
+ {
+ int i = 0;
+ int i2;
+ ulong ul1, ul2, ul3;
+ while (ula2[i] == 0)
+ i++;
+ if (!s)
+ Console.Write("-");
+ if (i == by2)
+ {
+ if ((i2 = ketasuu(ul1 = zerotoru(ula2[i]))) == 1)
+ Console.Write(ul1);
+ else
+ {
+ Console.WriteLine("{0}.", ul1 / (ul2 = tenjou((byte)(i2 - 1))));
+ zerohyouji(i2 - 1 - ketasuu(ul3 = ul1 % ul2));
+ Console.Write(ul3);
+ }
+ }
+ else
+ {
+ if ((i2 = ketasuu(ula2[by2])) > 1)
+ {
+ Console.WriteLine("{0}.", ula2[by2] / (ul2 = tenjou((byte)(i2 - 1))));
+ zerohyouji(i2 - 1 - ketasuu(ul1 = ula2[by2] % ul2));
+ Console.Write(ul1);
+ }
+ else
+ Console.WriteLine("{0}.", ula2[by2]);
+ for (int i3 = by2 - 1; i3 > i; i3--)
+ {
+ for (int i4 = 0; i4 < (18 - ketasuu(ula2[i3])); i4++)
+ Console.Write('0');
+ Console.Write(ula2[i3]);
+ }
+ for (int i3 = 0; i3 < 18 - ketasuu(ula2[i]); i3++)
+ Console.Write('0');
+ Console.Write(zerotoru(ula2[i]));
+ }
+ Console.WriteLine();
+ }
+ static int ketasuu(ulong ul1)
+ {
+ int i;
+ for (i = 1; ul1 > 9; i++)
+ ul1 /= 10;
+ return i;
+ }
+ static ulong zerotoru(ulong ul1)
+ {
+ while (ul1 % 10 == 0)
+ ul1 /= 10;
+ return ul1;
+ }
+ static void zerohyouji(int iA)
+ {
+ for (int i = 0; i < iA; i++)
+ Console.Write("0");
+ }
+ static void zerotsukihyouji(ulong ul)
+ {
+ zerohyouji(18 - ketasuu(ul));
+ Console.Write(ul);
+ }
+ static void ulphyouji()
+ {
+ short ula1noks = ulanoketasuu(by1, ula1);
+ short zerokz = ulanozerokazu(ula2);
+ int zerokzwaru18 = zerokz / 18;
+ int zerokzwaru18amari = zerokz % 18;
+ int i1;
+ ulong ul1;
+ Console.WriteLine("unit in the last place");
+ if (ula2noks > ula1noks)
+ {
+ Console.WriteLine("0.");
+ if (zerokzwaru18 < by1)
+ {
+ zerohyouji(ula2noks - ula1noks - 1);
+ Console.Write(ula1[by1]);
+ for (int i = by1 - 1; i > zerokzwaru18; i--)
+ {
+ zerohyouji(18 - ketasuu(ula1[i]));
+ Console.Write(ula1[i]);
+ }
+ zerohyouji(18 - ketasuu(ul1 = ula1[zerokzwaru18] / tenjou((byte)zerokzwaru18amari)) - zerokzwaru18amari);
+ Console.Write(ul1);
+ Console.WriteLine(".");
+ if (zerokzwaru18amari > 0)
+ {
+ zerohyouji(zerokzwaru18amari - ketasuu(ul1 = ula1[zerokzwaru18] % tenjou((byte)zerokzwaru18amari)));
+ Console.Write(ul1);
+ }
+ if (zerokz == 0)
+ Console.WriteLine("0");
+ else
+ {
+ for (int i = zerokzwaru18 - 1; i > -1; i--)
+ {
+ zerohyouji(18 - ketasuu(ul1 = ula1[i]));
+ Console.Write(ul1);
+ }
+ Console.WriteLine();
+ }
+ }
+ else
+ {
+ if (by1 == zerokzwaru18)
+ {
+ if (ula1noks - zerokz > 0)
+ {
+ zerohyouji(ula2noks - ula1noks - 1);
+ Console.Write(ula1[by1] / tenjou((byte)zerokzwaru18amari));
+ Console.WriteLine(".");
+ if (zerokzwaru18amari > 0)
+ Console.Write(ula1[by1] % tenjou((byte)zerokzwaru18amari));
+ if (zerokz == 0)
+ Console.WriteLine("0");
+ else
+ {
+ for (int i = by1 - 1; i > -1; i--)
+ {
+ zerohyouji(18 - ketasuu(ul1 = ula1[i]));
+ Console.Write(ul1);
+ }
+ Console.WriteLine();
+ }
+ }
+ else
+ {
+ if ((i1 = ula2noks - zerokz - 1) != 0)
+ {
+ zerohyouji(i1);
+ Console.WriteLine(".");
+ }
+ zerohyouji(zerokz - ula1noks);
+ Console.Write(ula1[by1]);
+ for (int i = by1 - 1; i > -1; i--)
+ {
+ zerohyouji(18 - ketasuu(ul1 = ula1[i]));
+ Console.Write(ul1);
+ }
+ Console.WriteLine();
+ }
+ }
+ else
+ {
+ if ((i1 = ula2noks - zerokz - 1) != 0)
+ {
+ zerohyouji(i1);
+ Console.WriteLine(".");
+ }
+ zerohyouji(zerokz - ula1noks);
+ Console.Write(ula1[by1]);
+ for (int i = by1 - 1; i > -1; i--)
+ {
+ zerohyouji(18 - ketasuu(ul1 = ula1[i]));
+ Console.Write(ul1);
+ }
+ Console.WriteLine();
+ }
+ }
+ }
+ else
+ {
+ int ula1by1noks = ketasuu(ula1[by1]);
+ Console.Write(ula1[by1] / tenjou((byte)(ula1by1noks - 1)));
+ Console.WriteLine(".");
+ if (ula1noks - zerokz == 1)
+ {
+ if (ula1by1noks == 1)
+ {
+ if (by1 == 0)
+ Console.WriteLine("0");
+ else
+ {
+ for (int i = by1 - 1; i > -1; i--)
+ {
+ zerohyouji(18 - ketasuu(ul1 = ula1[i]));
+ Console.Write(ul1);
+ }
+ Console.WriteLine();
+ }
+ }
+ else
+ {
+ zerohyouji(ula1by1noks - 1 - ketasuu(ul1 = ula1[by1] % tenjou((byte)(ula1by1noks - 1))));
+ Console.Write(ul1);
+ if (by1 == 0)
+ Console.WriteLine();
+ else
+ {
+ for (int i = by1 - 1; i > -1; i--)
+ {
+ zerohyouji(18 - ketasuu(ul1 = ula1[i]));
+ Console.Write(ul1);
+ }
+ Console.WriteLine();
+ }
+ }
+ }
+ else
+ {
+ if (by1 == zerokzwaru18)
+ {
+ zerohyouji(ula1by1noks - zerokzwaru18amari - 1 - ketasuu(ul1 = ula1[by1] % tenjou((byte)(ula1by1noks - 1)) / tenjou((byte)(zerokzwaru18amari))));
+ Console.Write(ul1);
+ Console.WriteLine(".");
+ if (zerokzwaru18amari > 0)
+ {
+ zerohyouji(zerokzwaru18amari - ketasuu(ul1 = ula1[by1] % tenjou((byte)zerokzwaru18amari)));
+ Console.Write(ul1);
+ if (by1 == 0)
+ Console.WriteLine();
+ else
+ {
+ for (int i = by1 - 1; i > -1; i--)
+ {
+ zerohyouji(18 - ketasuu(ul1 = ula1[i]));
+ Console.Write(ul1);
+ }
+ Console.WriteLine();
+ }
+ }
+ else
+ {
+ if (by1 == 0)
+ Console.WriteLine("0");
+ else
+ {
+ for (int i = by1 - 1; i > -1; i--)
+ {
+ zerohyouji(18 - ketasuu(ul1 = ula1[i]));
+ Console.Write(ul1);
+ }
+ Console.WriteLine();
+ }
+ }
+ }
+ else
+ {
+ if (ula1by1noks > 1)
+ {
+ zerohyouji(ula1by1noks - 1 - ketasuu(ul1 = ula1[by1] % tenjou((byte)(ula1by1noks - 1))));
+ Console.Write(ul1);
+ for (int i = by1 - 1; i > zerokzwaru18; i--)
+ {
+ zerohyouji(18 - ketasuu(ul1 = ula1[i]));
+ Console.Write(ul1);
+ }
+ zerohyouji(18 - zerokzwaru18amari - ketasuu(ul1 = ula1[zerokzwaru18] / tenjou((byte)zerokzwaru18amari)));
+ Console.Write(ul1);
+ Console.WriteLine(".");
+ if (zerokzwaru18amari == 0)
+ {
+ if (zerokz == 0)
+ Console.WriteLine("0");
+ else
+ {
+ for (int i = zerokzwaru18 - 1; i > -1; i--)
+ {
+ zerohyouji(18 - ketasuu(ul1 = ula1[i]));
+ Console.Write(ul1);
+ }
+ Console.WriteLine();
+ }
+ }
+ else
+ {
+ zerohyouji(zerokzwaru18amari - ketasuu(ul1 = ula1[zerokzwaru18] % tenjou((byte)zerokzwaru18amari)));
+ Console.Write(ul1);
+ if (zerokzwaru18 == 0)
+ Console.WriteLine();
+ else
+ {
+ for (int i = zerokzwaru18 - 1; i > -1; i--)
+ {
+ zerohyouji(18 - ketasuu(ul1 = ula1[i]));
+ Console.Write(ul1);
+ }
+ Console.WriteLine();
+ }
+ }
+ }
+ else
+ {
+ for (int i = by1 - 1; i > zerokzwaru18; i--)
+ {
+ zerohyouji(18 - ketasuu(ul1 = ula1[i]));
+ Console.Write(ul1);
+ }
+ zerohyouji(18 - zerokzwaru18amari - ketasuu(ul1 = ula1[zerokzwaru18] / tenjou((byte)zerokzwaru18amari)));
+ Console.Write(ul1);
+ Console.WriteLine(".");
+ if (zerokzwaru18amari > 0)
+ {
+ zerohyouji(zerokzwaru18amari - ketasuu(ul1 = ula1[zerokzwaru18] % tenjou((byte)zerokzwaru18amari)));
+ Console.Write(ul1);
+ if (zerokzwaru18 == 0)
+ Console.WriteLine();
+ else
+ {
+ for (int i = zerokzwaru18 - 1; i > -1; i--)
+ {
+ zerohyouji(18 - ketasuu(ul1 = ula1[i]));
+ Console.Write(ul1);
+ }
+ Console.WriteLine();
+ }
+ }
+ else
+ {
+ if (zerokz == 0)
+ Console.WriteLine("0");
+ else
+ {
+ for (int i = zerokzwaru18 - 1; i > -1; i--)
+ {
+ zerohyouji(18 - ketasuu(ul1 = ula1[i]));
+ Console.Write(ul1);
+ }
+ Console.WriteLine();
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ static void ulphyouji2(int n, int c)
+ {
+ int ket, ket2;
+ short s1;
+ ulong ul1if;
+ Console.WriteLine("unit in the last place");
+ Console.WriteLine("0.");
+ if (ula2[0] == 0 && by2 == 0)
+ {
+ if ((ket2 = c - n - ulanoketasuu(by1, ula1)) == 0)
+ {
+ if (n == c - 1)
+ Console.WriteLine("5");
+ else
+ {
+ Console.Write(ula1[by1] / tenjou((byte)((ket = ketasuu(ula1[by1])) - 1)));
+ Console.WriteLine(".");
+ if (ket != 1)
+ Console.Write(ula1[by1] % tenjou((byte)(ket - 1)));
+ for (int i = by1 - 1; i > -1; i--)
+ zerotsukihyouji(ula1[i]);
+ Console.WriteLine();
+ }
+ }
+ else
+ {
+ Console.WriteLine("0.");
+ zerohyouji(ket2 - 1);
+ Console.Write(ula1[by1]);
+ for (int i = by1 - 1; i > -1; i--)
+ zerotsukihyouji(ula1[i]);
+ Console.WriteLine();
+ }
+ }
+ else
+ {
+ int ula2zerokzwaru18 = ulanozerokazu(ula2) / 18;
+ int ula2zerokzwaru18amari = ulanozerokazu(ula2) % 18;
+ if ((s1 = ulanozerokazu(ula2)) < (ket = ulanoketasuu(by1, ula1)))
+ {
+ zerohyouji(c - n - ket);
+ if (by1 == ula2zerokzwaru18)
+ {
+ Console.Write(ula1[by1] / tenjou((byte)ula2zerokzwaru18amari));
+ Console.WriteLine(".");
+ if (ula2zerokzwaru18amari != 0)
+ {
+ zerohyouji(ula2zerokzwaru18amari - ketasuu(ul1if = ula1[by1] % tenjou((byte)ula2zerokzwaru18amari)));
+ Console.Write(ul1if);
+ }
+ if (by1 == 0 && ula2zerokzwaru18amari == 0)
+ Console.WriteLine("0");
+ else
+ {
+ for (int i = by1 - 1; i > -1; i--)
+ zerotsukihyouji(ula1[i]);
+ Console.WriteLine();
+ }
+ }
+ else
+ {
+ Console.Write(ula1[by1]);
+ for (int i = by1 - 1; i > ula2zerokzwaru18; i--)
+ zerotsukihyouji(ula1[i]);
+ if (ula2zerokzwaru18amari != 0)
+ {
+ if ((ket2 = ketasuu(ula1[ula2zerokzwaru18])) > ula2zerokzwaru18amari)
+ {
+ zerohyouji(18 - ket2);
+ Console.Write(ula1[ula2zerokzwaru18] / tenjou((byte)ula2zerokzwaru18amari));
+ Console.WriteLine(".");
+ zerohyouji(ula2zerokzwaru18amari - ketasuu(ul1if = ula1[ula2zerokzwaru18] % tenjou((byte)ula2zerokzwaru18amari)));
+ Console.Write(ul1if);
+ for (int i = ula2zerokzwaru18 - 1; i > -1; i--)
+ zerotsukihyouji(ula1[i]);
+ }
+ else
+ {
+ zerohyouji(18 - ula2zerokzwaru18amari);
+ Console.WriteLine(".");
+ zerohyouji(ula2zerokzwaru18amari - ketasuu(ul1if = ula1[ula2zerokzwaru18] % tenjou((byte)ula2zerokzwaru18amari)));
+ Console.Write(ul1if);
+ for (int i = ula2zerokzwaru18 - 1; i > -1; i--)
+ zerotsukihyouji(ula1[i]);
+ }
+ Console.WriteLine();
+ }
+ else
+ {
+ zerotsukihyouji(ula1[ula2zerokzwaru18]);
+ Console.WriteLine(".");
+ if (ulanozerokazu(ula2) == 0)
+ Console.WriteLine("0");
+ else
+ {
+ for (int i = ula2zerokzwaru18 - 1; i > -1; i--)
+ zerotsukihyouji(ula1[i]);
+ Console.WriteLine();
+ }
+ }
+ }
+ }
+ else
+ {
+ zerohyouji(c - n - s1);
+ Console.WriteLine(".");
+ zerohyouji(s1 - ket);
+ Console.Write(ula1[by1]);
+ for (int i = by1 - 1; i > -1; i--)
+ zerotsukihyouji(ula1[i]);
+ Console.WriteLine();
+ }
+ }
+ }
+ static bool b1 = true;
+ static bool df = true;
+ static bool s;
+ static int ir;
+ static uint counter = 0;
+ static uint ui1 = 256;
+ static uint ui2;
+ static char[] cr = new char[255];
+ static ulong[] ula1 = new ulong[60];
+ static ulong[] ula2 = new ulong[60];
+ static byte by1, by2;
+ static short ula2noks;
+ }
+}