Подтвердить что ты не робот

Двойное разделение на ноль возвращает ошибку Divide by Zero

Я испытываю неожиданное поведение и надеялся, что кто-то может помочь с некоторыми указаниями относительно того, в каких областях сосредоточиться на расследовании.

У меня есть два метода: один по сути выполняет деление на нулевой тест на double, второй вызывает метод extern для неуправляемой dll.

Примечание.. В среде .NET, деление Double на Zero должно возвращать значение бесконечности (забавно либо положительных, либо отрицательных ароматов).

Псевдокод для того, что я делаю, выглядит примерно так:

InfinityTest(); // Returns an Infinity value as expected
DllCall();
InfinityTest(); // Divide by zero error on second call.

Первый вызов InfinityTest() возвращает значение Infinity, как ожидалось. Второй вызов InfinityTest() вызывает исключение "Разделить на ноль", которое я не ожидал.

Обновление

Эффективный InfinityTest() код ниже. Для краткости я удалил элементы try/catch и т.д. У меня нет разрешения вдаваться в подробности о элементе псевдокода DllCall(), извинения.

private double InfinityTest()
{
    double a = 1.0;
    int b = 0;
    return a / b;
}
4b9b3361

Ответ 1

Поскольку это звучит так, как ваша DLL меняет слово состояния FP на вас, ваш единственный выбор - изменить его. Я предлагаю P/Invoke _clearfp или _fpreset. Вот их подписи P/Invoke:

    [DllImport("msvcrt.dll")]
    static extern UInt32 _clearfp();
    [DllImport("msvcrt.dll")]
    static extern void _fpreset();

Это не может быть reset так, как они были, но, надеюсь, это будет достаточно близко.