В .NET существует ли двойной класс на 128 или 256 битов?

У меня есть приложение, что я хочу смочь использовать большие количества и очень точные числа. Для этого мне была нужна интерпретация точности, и IntX только работает на целые числа.

Существует ли класс в платформе .NET или даже третьем лице (предпочтительно свободный), который сделал бы это?

Там другой путь состоит в том, чтобы сделать это?

7
задан akshaykarthik 3 June 2010 в 16:04
поделиться

7 ответов

Может быть, вам подойдет десятичный тип ?

9
ответ дан 6 December 2019 в 05:48
поделиться

В библиотеке F # также есть несколько действительно больших числовых типов, если вы не против их использовать ...

4
ответ дан 6 December 2019 в 05:48
поделиться

Десятичная система счисления - это 128-битный (16 байт) тип значений, который используется для высокоточных вычислений. Это тип с плавающей точкой, который внутренне представлен как основание 10, а не как основание 2 (т.е. двоичное). Если вам нужна высокая точность, вам следует использовать Decimal - но недостатком является то, что Decimal примерно в 20 раз медленнее, чем плавающие числа.

2
ответ дан 6 December 2019 в 05:48
поделиться

Вы можете использовать свободно распространяемый пакет произвольной точности BigDecimal из java.math , который является частью распространяемого пакета J # от Microsoft и является управляемая библиотека .NET.

Поместите ссылку на vjslib в свой проект, и вы сможете что-то вроде этого:

using java.math;

public void main() 
{
    BigDecimal big = new BigDecimal("1234567890123456789011223344556677889900.0000009876543210000987654321");
    big.add(new BigDecimal(1.0));
    Debug.Print(big);
}

В консоли отладки будет выведено следующее:

1234567890123456789011223344556677889901.0000009876543210000987654321

Обратите внимание, что, как уже упоминалось, .NET 2010 содержит Класс BigInteger , который, по сути, уже был доступен в более ранних версиях, но только как внутренний класс (т.е. вам потребуется некоторое отражение, чтобы заставить его работать).

6
ответ дан 6 December 2019 в 05:48
поделиться

Десятичное - 128 бит, если это сработает.

1
ответ дан 6 December 2019 в 05:48
поделиться

Используйте decimal для этого, если возможно.

2
ответ дан 6 December 2019 в 05:48
поделиться

Если Decimal не работает для вас, попробуйте реализовать (или получить код откуда-нибудь) Rational арифметику с использованием больших целых чисел. Это обеспечит необходимую вам точность.

3
ответ дан 6 December 2019 в 05:48
поделиться