17 Kasım 2017 Cuma

_controlfp metodu

Giriş
Bu metod yerine _controlfp_s() metodunu kullanmak daha iyi. 486'dan itibaren FPU diye ayrı bir şey yok. Açıklaması şöyle.
Most x86 processors since the Intel 80486 have had these x87 instructions implemented in the main CPU

Örnek
C#'ta X87 FPU'nun precision değerini değiştirmek için şöyle yaparız.
using System;
using System.Runtime.InteropServices;

static void Main()
{
  double s = -2.6114289999999998;

  Console.WriteLine(Math.Round(s, 7).ToString("R")); // -2.611429

  if (!Environment.Is64BitProcess)
    _controlfp(0x00030000, 0x00020000);

  Console.WriteLine(Math.Round(s, 7).ToString("R")); // -2.61142897605896
}

[DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)]
static extern uint _controlfp(uint newcw, uint mask);

Hiç yorum yok:

Yorum Gönder