Должна быть возможность упаковать 'не может быть идеальным квадратом, если последние X цифр N' гораздо эффективнее, чем это! Я буду использовать 32-битные числа java и получу достаточно данных для проверки последних 16 битов числа - это 2048 шестнадцатеричных значений типа int.
...
Хорошо. Либо я столкнулся с некоторой теорией чисел, которая немного выше меня, либо в моем коде есть ошибка. В любом случае, вот код:
public static void main(String[] args) {
final int BITS = 16;
BitSet foo = new BitSet();
for(int i = 0; i< (1<<BITS); i++) {
int sq = (i*i);
sq = sq & ((1<<BITS)-1);
foo.set(sq);
}
System.out.println("int[] mayBeASquare = {");
for(int i = 0; i< 1<<(BITS-5); i++) {
int kk = 0;
for(int j = 0; j<32; j++) {
if(foo.get((i << 5) | j)) {
kk |= 1<<j;
}
}
System.out.print("0x" + Integer.toHexString(kk) + ", ");
if(i%8 == 7) System.out.println();
}
System.out.println("};");
}
и вот результаты:
(изд: исключен из-за низкой производительности в prettify.js; просмотрите историю изменений, чтобы увидеть.)
Это, безусловно, возможно, хотя это не так просто, как просто изменить параметр. Для этого вам потребуется написать надстройку Visual Studio.
Посетите http://msdn.microsoft.com/en-us/vsx/bb980955.aspx , чтобы начать работу. Как укажут другие. Это не для слабонервных.
Вот ссылка, которая может указать вам на то, что вы ищете: http://msdn.microsoft.com/en-us/library/bb166778.aspx
Вы не можете. Это потребует поддержки языковой службы, и ни C #, ни VB.Net не предоставляют эту функциональность.
Не может, наверное, слишком сильное слово. Это, безусловно, можно сделать с помощью надстройки, которая глубоко проверяет код и определяет иерархии. Однако это весьма нетривиальная задача.
РЕДАКТИРОВАТЬ: когда я впервые написал это boost :: multiprecision :: uint128_t
еще не было. Сохраняем этот ответ по историческим причинам.
Я создал класс uint128 раньше, вы можете проверить его по адресу: http://www.codef00.com/code/uint128.h .
. ] Он зависит от ускорения для автоматического предоставления всех вариантов математических операторов, поэтому он должен поддерживать все, что делает собственный тип unsigned int
.
Есть некоторые незначительные расширения для встроенных типов, такие как инициализируя его строкой вроде этой:
uint128_t x("12345678901234567890");
Существует вспомогательный макрос, который работает аналогично макросам в C99, который вы можете использовать следующим образом: Но время, необходимое для создания такой надстройки, потребует больше времени, которое вы потратите на просмотр компонентов и определение того, являются ли они одноразовыми
Я не уверен, умеют ли FXCop или StyleCop это делать. Но тогда это будет предложение / предупреждение после компиляции.
Думаю, Resharper предлагает это.
Говорят, что такие вещи будут намного проще в VS.NET 2010 . Редактор переписывается в WPF.
Может быть, я плохой человек для этого, но я недавно использую этот кусок кода:
public static void BulkDispose(object[] objects)
{
foreach (object o in objects)
{
if (o != null)
{
if (o is IDisposable)
{
IDisposable disposable = o as IDisposable;
disposable.Dispose();
}
}
}
}