System.Convert.ToDouble (десятичное число), дающее два разных ответа - PullRequest
3 голосов
/ 29 апреля 2020

У меня очень странная проблема. Я запускаю это в ближайшем окне:

?(System.Convert.ToDouble(2458963.229671001113318401517D))

2458963.229671001

Что я и ожидаю!

Затем, позже в моем приложении, после инициализации Managed DirectX, я получаю следующее:

?(System.Convert.ToDouble(2458963.229671001113318401517D))

2458963.25

После того, как я достигну этой точки в моем коде, навсегда после того, как System.Convert.ToDouble() вернет усеченные и неправильные результаты.

Я выделил одну строку, которая вызывает это изменение в поведении System.Convert.ToDouble():

new Device(adapterOrdinal, dType, this, flags, m_presentParams); 

Это Microsoft.DirectX.Direct3D.Device объект, из:

// Assembly: Microsoft.DirectX.Direct3D, Version=1.0.2902.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

Я не уверен, почему создание Microsoft.DirectX.Direct3D.Device вызывает изменение в действии System.Convert.ToDouble().

1 Ответ

5 голосов
/ 29 апреля 2020

Согласно https://docs.microsoft.com/en-us/previous-versions/bb324030 (v% 3Dvs.85) :

При создании объекта Device общая языковая среда выполнения изменит единицу с плавающей запятой ( FPU) с одинарной точностью для поддержания лучшей производительности. Чтобы поддерживать стандартный FPU двойной точности, который используется по умолчанию для общеязыковой среды выполнения, используйте флаг CreateFlags.FpuPreserve при создании объекта Device

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...