Математический модуль в c#

Возможность продолжить чтение файла и подождать до тех пор, пока у файла не появится больше обновлений для вас, не должно быть так сложно выполнить код самостоятельно. Вот какой-то псевдокод:

BufferedReader br = new BufferedReader(...);
String line;
while (keepReading) {
    line = reader.readLine();
    if (line == null) {
        //wait until there is more of the file for us to read
        Thread.sleep(1000);
    }
    else {
        //do something interesting with the line
    }
}

Я бы предположил, что вы захотите поместить этот тип функций в свой собственный поток, чтобы вы могли спать и не влиять на другие области вашего приложения. Вы хотели бы показать keepReading в сеттере, чтобы ваш основной класс / другие части приложения могли безопасно закрыть поток без каких-либо других головных болей, просто позвонив stopReading() или что-то подобное.

26
задан penguat 22 April 2010 в 13:17
поделиться

7 ответов

Попробуйте (a% b) * Math.Sign (a)

Попробуйте это; работает правильно.

static int MathMod(int a, int b) {
    return (Math.Abs(a * b) + a) % b;
}
26
ответ дан 28 November 2019 в 07:35
поделиться

Ну, определение (если я не ошибаюсь) - что-то вроде этого целочисленного деления, как встроенный модуль:)

Другой вариант - изменить результат встроенного модуля в соответствии со знаками операндов. Примерно так:

if(a < 0 && b > 0)
{
    return (a % b + b) % b;
}
else if ....
4
ответ дан Maciej Hehl 28 November 2019 в 07:35
поделиться

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

То есть,

, если -5 % 2 = -1 и -5 / 2 = -2, и если вам небезразлично, что -5 / 2 * 2 + -5 % 2 = -5, то когда вы вычисляете -5 % 2 = 1, вы также вычисляете -5 / 2 = -3.

1
ответ дан clahey 28 November 2019 в 07:35
поделиться

Я знаю, что вопрос не задавался, но я только написал и протестировал метод, который также возвращает частное. Я не нашел этого, когда искал его, поэтому я подумал, что выложу его туда.

/// <summary>
/// Compute integer quotient and remainder of <paramref name="dividend"/> / <paramref name="divisor"/>
/// where the <paramref name="remainder"/> has the same sign as <paramref name="divisor"/>, and is
/// between zero (inclusive) and the <paramref name="divisor"/> (exclusive). As always,
/// (quotientResult * <paramref name="divisor"/> + <paramref name="remainder"/> == <paramref name="dividend"/>).
/// </summary>
public static int DivRemPeriodic(int dividend, int divisor, out int remainder) {
    var quotient = Math.DivRem(dividend, divisor, out remainder);
    if (divisor > 0 ? remainder < 0 : remainder > 0) {
        remainder += divisor;
        quotient -= 1;
    }
    return quotient;
}
0
ответ дан Keith Robertson 28 November 2019 в 07:35
поделиться
x < 0 ? ((x % m) + m) % m : x % m;
5
ответ дан 28 November 2019 в 07:35
поделиться

Исправление:

(ans = a% b) <0? (a <0 && b <0? (ans-b)% (- b): (ans + b)% b): ans

0
ответ дан 28 November 2019 в 07:35
поделиться

Может быть, это оператор%?

http://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx

-2
ответ дан 28 November 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: