Единственный по сравнению с Двойными типами данных

Dmitriy прав, что Вы захотите, чтобы Решето Atkin генерировало главный список, но я не полагаю, что это заботится о целой проблеме. Теперь, когда у Вас есть список начал, необходимо будет видеть, сколько из тех начал действует как делитель (и как часто).

Вот некоторый Python для алгоритма забастовка> Взгляд здесь и поиск "Предмета: математике - нужен алгоритм делителей". Просто считайте количество объектов в списке вместо того, чтобы возвратить их как бы то ни было.

Вот доктор Math , который объясняет, что точно это - Вы, должен сделать математически.

По существу это сводится к тому, если Ваш номер n:
n = a^x * b^y * c^z
(где a, b, и c являются главными делителями и x n, y, и z являются количеством раз, что делитель повторяется) тогда общий счет для всех делителей:
(x + 1) * (y + 1) * (z + 1).

Редактирование: BTW, для нахождения a, b, c, и т.д. Вы захотите сделать, какие суммы к жадному алгоритму, если я пойму это правильно. Запустите со своего самого большого главного делителя и умножьте его отдельно, пока дальнейшее умножение не превысило бы номер n. Тогда переместите в следующий самый низкий фактор и времена предыдущее главное ^ количество раз, это было умножено на текущее начало, и продолжайте умножаться началом, пока следующее не превысит n... и т.д. Отслеживают количество раз, Вы умножаете делители вместе и применяете те числа в формулу выше.

Не 100%, уверенных в моем описании алгоритма, но если это не он, это - что-то подобное.

6
задан Everett 8 December 2009 в 18:24
поделиться

6 ответов

В большинстве настольных приложений - да.

Хотя, если у вас огромный массив, уменьшение его вдвое может быть достаточно значительным, чтобы иметь смысл, если вам не нужна точность .

Особенно с учетом того, что почти все настольные компьютеры потребителей имеют арифметические операции с плавающей запятой двойной точности, выполняемые аппаратно.

2
ответ дан 9 December 2019 в 22:35
поделиться

Из эта .net статья

Ширина типа данных

Наиболее эффективными типами данных являются те, которые используют собственную ширину данных платформы времени выполнения. По текущему платформы, ширина данных 32 бита, как для компьютера, так и для операционной системы.

Следовательно, Integer в настоящее время самый эффективный тип данных в Visual Базовый .NET. Далее идут длинные, короткие, и байт в таком порядке эффективности. Вы можете улучшить производительность Short и Byte, отключив целое число проверка переполнения, например установка RemoveIntegerChecks собственности, но это влечет за собой риск неверные расчеты из-за необнаруженные переполнения. Ты не можешь включить и выключить эту проверку во время время выполнения; вы можете установить только его значение для следующей сборки вашего приложение.

Если вам нужны дробные значения, лучший выбор - Double, потому что текущие процессоры с плавающей запятой платформы выполняют все операции в двойная точность. Следующие лучшие - одиночные и Decimal в таком порядке эффективность.

4
ответ дан 9 December 2019 в 22:35
поделиться

Как говорит Марк в своем комментарии, пространство может быть проблемой в системах с ограниченным объемом памяти. Вы также можете проиндексировать или отсортировать список, и зачем это делать с двойными числами, если вы можете хранить свои значения в одиночных числах?

2
ответ дан 9 December 2019 в 22:35
поделиться

На некотором оборудовании арифметика с двойными значениями может занимать больше времени, чем с одиночными значениями, но самые последние FPU имеют единственный собственный тип данных (например, 80-битные расширенные значения с плавающей запятой для x86) который будет использоваться для внутренних расчетов независимо от того, какой тип данных в памяти вы используете. Это означает, что «вычисления FPU будут быстрее с одинарной точностью», как правило, не причина использовать одинарную точность на большинстве современных аппаратных средств сегодня.

Тем не менее, в дополнение к «использованию» меньше памяти "причины, описанные в других ответах, есть очень практическая причина, когда дело доходит до векторных инструкций SIMD, таких как SSE и AltiVec - одинарная точность, вероятно, в два раза быстрее, чем двойная точность, поскольку инструкции работают с векторами фиксированных размер,

2
ответ дан 9 December 2019 в 22:35
поделиться

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

Имейте в виду, что как только числа всасываются в FPU, они все равно расширяются до очень высокой точности. Что, как говорится,

1
ответ дан 9 December 2019 в 22:35
поделиться

Если вы кодируете OpenGL, то обычно использовать GLSingle (например, single) вместо GLDouble. Практически во всех случаях одинарная точность более чем достаточна для большинства графических приложений и должна быть быстрее - хотя, признаюсь, я не уверен в этом на графических процессорах последнего поколения.

Моя любимая цитата по этому поводу - то, что одинарной точности было достаточно для навигации до Луны и обратно, поэтому на практике это необычно, чтобы вызвать реальную проблему. Тем не менее, в большинстве случаев в настоящее время я бы выбрал двойное, так как хранилище дешево и менее вероятно возникновение каких-либо проблем с двоичным или десятичным числом.

0
ответ дан 9 December 2019 в 22:35
поделиться
Другие вопросы по тегам:

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