Почему десятичный тип C# имеет 128 бит?

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

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

1 ответ

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-битного доступа требует монополизации 2 дорог.

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

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

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

Другие вопросы по тегам