Почему десятичный тип C# имеет 128 бит? - PullRequest
0 голосов
/ 11 июля 2020

Есть ли причина, по которой тип C# decimal был выбран равным 128 битам? Аналогия с double предполагала бы 64 бита (только десятичное число с плавающей запятой вместо двоичного), тогда как аналогия с Java или философия «убедитесь, что у него есть все, что нужно», предложили бы произвольную точность.

Это не риторический вопрос. Лично я бы пошел с произвольной точностью, но 128 бит, вероятно, работают нормально. Я просто спрашиваю, были ли где-то задокументированы фактические причины, по которым был сделан выбор, или они были правдоподобно угаданы; было ли оно нацелено на конкретный c вариант использования или было решено интуитивно; есть ли известные варианты использования, для которых 64 бит недостаточно, но не требуют произвольной точности?

1 Ответ

1 голос
/ 11 июля 2020

Decimal позволяет иметь большую емкость для хранения действительного числа, чем double (8 байтов = 64 бита), но меньше BigInteger, что не является типом данных для управления вещественными числами.

Наша информатика основана на архитектуре микропроцессора, и процессоры фактически управляют большинством 64-битных регистров для работы с внутренними данными и памятью.

Раньше регистры ЦП могли быть 8, 16, 32 или 64 и даже 128 бит для конкретного набора микросхем.

Следовательно, на самом деле обычная операция и оптимизация ЦП в 64 бита равна 8 байтам.

ЦП x64 работают с максимальной производительностью и скоростью при использовании 8-байтовых регистров для получения / установки ячеек памяти, вычислений, выполнения условных тестов, вызова процедур, возврата процедур, выталкивания и выталкивания стека и т. д.

Таким образом, чтобы обеспечить максимально быстрое вычисление чисел, имеющих более 8 байтов, Первый лучший выбор - использовать два 64-битных регистра, следовательно, 128 бит, что равняется 8 + 8 байтам.

Думаю, это дорога: 32 бита - это маленькая дорога, 64-битная стандартная дорога и 128-битная большая дорога: использование 32-битной системы в системе x64 требует ограничения дороги, а использование 128-битного доступа требует монополизации двух дорог.

Но для лучшей оптимизации, и из-за производства электроники c все элементы в нашей архитектуре ЦП кратны 8 битам, поэтому 1/2/4/8/16/32/64/128/256 ... байтов. Из-за оборудования и того, как это делают конструкторы. Из-за теории двоичной арифметики c.

Таким образом, первая лучшая возможность иметь большое действительное число, превышающее 64 бита, - это использовать 128 бит, то есть два регистра процессора по 64 бита (в системе x64 ).

Руководства разработчика программного обеспечения для архитектур Intel® 64 и IA-32

...