OSDN Git Service

n master
authorunknown <honooo@users.sourceforge.jp>
Tue, 16 Dec 2014 14:49:09 +0000 (23:49 +0900)
committerunknown <honooo@users.sourceforge.jp>
Tue, 16 Dec 2014 14:49:09 +0000 (23:49 +0900)
n

flp.sln [new file with mode: 0644]
flp/Program.cs [new file with mode: 0644]
flp/Properties/AssemblyInfo.cs [new file with mode: 0644]
flp/flp.csproj [new file with mode: 0644]

diff --git a/flp.sln b/flp.sln
new file mode 100644 (file)
index 0000000..73b42d1
--- /dev/null
+++ b/flp.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "flp", "flp\flp.csproj", "{5F8FE20F-5E5A-42E6-A236-044E4F93C00A}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Any CPU = Debug|Any CPU
+               Release|Any CPU = Release|Any CPU
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {5F8FE20F-5E5A-42E6-A236-044E4F93C00A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {5F8FE20F-5E5A-42E6-A236-044E4F93C00A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {5F8FE20F-5E5A-42E6-A236-044E4F93C00A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {5F8FE20F-5E5A-42E6-A236-044E4F93C00A}.Release|Any CPU.Build.0 = Release|Any CPU
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/flp/Program.cs b/flp/Program.cs
new file mode 100644 (file)
index 0000000..5354adc
--- /dev/null
@@ -0,0 +1,1001 @@
+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;
+    }
+}
diff --git a/flp/Properties/AssemblyInfo.cs b/flp/Properties/AssemblyInfo.cs
new file mode 100644 (file)
index 0000000..ad33c1c
--- /dev/null
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。
+// アセンブリに関連付けられている情報を変更するには、
+// これらの属性値を変更してください。
+[assembly: AssemblyTitle("flp")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("flp")]
+[assembly: AssemblyCopyright("Copyright ©  2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから 
+// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、
+// その型の ComVisible 属性を true に設定してください。
+[assembly: ComVisible(false)]
+
+// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です
+[assembly: Guid("18b2840d-1ca7-4e3f-83f8-f610566e4c96")]
+
+// アセンブリのバージョン情報は、以下の 4 つの値で構成されています:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を 
+// 既定値にすることができます:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/flp/flp.csproj b/flp/flp.csproj
new file mode 100644 (file)
index 0000000..7d06e8d
--- /dev/null
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{5F8FE20F-5E5A-42E6-A236-044E4F93C00A}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>flp</RootNamespace>
+    <AssemblyName>flp</AssemblyName>
+    <TargetFrameworkVersion>v3.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file