Реализация Pow для двойного

Я разрабатываю код, который будет использоваться для управления движением, и у меня возникла проблема с функцией pow. Я использую VS2010 в качестве IDE.

Вот моя проблема: Я имею:

    double p = 100.0000;
    double d = 1000.0000;
    t1 = pow((p/(8.0000*d),1.00/4.000);

Оценивая эту последнюю функцию, я не получаю лучшего приближения в качестве результата. Я получаю правильные 7 десятичных цифр, и все последующие цифры являются мусором. Я предполагаю, что функция pow только приводит к вводу любой входной переменной как float и процедур с вычислением.

Am I right? If so, is there any code I can get "inspired" with to reimplement pow for a better precision?

Редактировать: Решено.

В конце концов, у меня были проблемы с битами конфигурации FPU, вызванные Direct3D, который использовался OGRE 3D Framework.

Если вы используете OGRE, в графическом интерфейсе конфигурации просто установите «Режим с плавающей запятой = Согласованный».

При использовании необработанного Direct3D при вызове CreateDevice обязательно передайте & quot; D3DCREATE_FPU_PRESERVE & quot; флаг к нему.

Исходное сообщение:

You may be using a libray that is changing the default precision of the FPU to single-precision. Then all floating-point operations, even on doubles, will actually be performed as single-precision operations.

As a test, you can try calling _controlfp( _CW_DEFAULT, 0xfffff ); (you need to include ) before performing the calculation to see if you get the correct result. This will reset the floating-point control word to default values. Note that it will reset other settings as well, which may cause issues.

One common library that changes the floating-point precision is Direct3D 9 (and maybe other versions too): By default, it changes the FPU to single-precision when creating a device. If you use it, specify the flag D3DCREATE_FPU_PRESERVE when creating the device to prevent it from changing the FPU precision.

Ответы на вопрос(2)

Ваш ответ на вопрос