2015-04-01 4 views
0

Моя первая мысль заключалась в том, чтобы реализовать класс, который хранит коэффициент как двойной, а 10^X - как int/short.Что такое хороший способ хранения очень больших чисел? (Например, 572e6561) в C#

Я хочу использовать технические обозначения над научной нотацией, потому что это проще для конечных пользователей.

Если есть проекты для этого, я не могу найти их.

Я знаю System.Numerics.BigInteger Существует, но это довольно медленно. Мне очень нужна высокая скорость для выполнения многих расчетов на мобильных устройствах. Я просто хочу хранить числа как технические обозначения.

Любые идеи?

+0

Если вы собираетесь реализовать свой собственный класс, имеет смысл использовать int для мантемы, а также экспонента. или использовать библиотеку, если возможно – camelccc

+0

Да, я понял, что int, вероятно, будет лучше для обоих, но я не уверен, как именно реализовать его таким образом, чтобы это не было медленным. Знаете ли вы о каких-либо хороших библиотеках для этого? – GeoStyx

+0

integer ops arent slow, это просто вопрос перенормировки вашей мантии, которая будет использоваться любой расширенной библиотекой. это может дать несколько предложений http://stackoverflow.com/questions/2967723/is-there-a-128-or-256-bit-double-class-in-net – camelccc

ответ

0

Если вам не нужна большая точность, просто большие величины, то я бы сказал, чтобы использовать два значения для представления мантиссы и экспоненты. Использование целых чисел для обоих будет ближе к тому, как внутренние числа с плавающей запятой обрабатываются. Но использование плавающей запятой, по крайней мере, для мантиссы, вероятно, облегчило бы осуществление многих операций за счет нескольких бит точности мантиссы.

C имеет такие функции, как frexp и ldexp, чтобы отдельно разобраться с мантиссой и показателем числа с плавающей запятой. Я не знаю никаких C# или .NET, но, возможно, подобные функции доступны и там.

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

Смежные вопросы