Очень, очень большие числа с плавающей точкой в ​​C # - PullRequest
6 голосов
/ 07 января 2009

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

Проблема: 100 000+ планет могут вместить МНОГО людей. Более чем C # Decimal может справиться. Поскольку я делаю средние и другие вещи с этими числами, мне нужна возможность работать с плавающей точкой (или я бы просто использовал библиотеку BigInt).

Кто-нибудь знает класс BigFloatingPoint (или любой другой), который я могу использовать? Google сегодня очень бесполезен. Я мог бы написать класс, который бы работал достаточно хорошо, но я бы предпочел использовать что-то уже существующее, если такое существует.

Ответы [ 3 ]

11 голосов
/ 07 января 2009

Используйте единицы мегаполиса, чтобы достичь большего запаса.

Кроме того, десятичная дробь позволяет вам иметь 100 000 планет, каждая из которых в 100000000000000 раз превышает население Земли, если моя арифметика верна. Вы уверены, что этого недостаточно?

2 голосов
/ 07 января 2009

Даже если на каждой планете проживает 100 миллиардов человек, общее количество по-прежнему составляет 1Е16. Это хорошо в пределах 64-разрядного целого числа со знаком (2 ^ 63 соответствует 9 223 372 036 854 775 807, что почти 1E19 ...

Вы можете использовать миллионы миллиардов людей на планету, имея 100000 планет, прежде чем вы приблизитесь к пределу ...

Что касается дробных и средних величин и тому подобного, разве вы не можете преобразовать в число с плавающей запятой или удвоить при выполнении каких-либо таких вычислений?

1 голос
/ 07 января 2009

Вам действительно нужна точность 28 цифр? Не могли бы вы использовать плавающую точку для некоторых расчетов?

(точнее, в два раза: от ± 5,0e − 324 до ± 1,7e308)

...