Какие языки программирования поддерживают арифметику произвольной точности?

В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.

При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.

Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».

Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this. Возьмем этот пример:

public class Some {
    private int id;
    public int getId(){
        return this.id;
    }
    public setId( int newId ) {
        this.id = newId;
    }
}

И в другом месте вашего кода:

Some reference = new Some();    // Point to a new object of type Some()
Some otherReference = null;     // Initiallly this points to NULL

reference.setId( 1 );           // Execute setId method, now private var id is 1

System.out.println( reference.getId() ); // Prints 1 to the console

otherReference = reference      // Now they both point to the only object.

reference = null;               // "reference" now point to null.

// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );

// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...

Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference и otherReference оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.

20
задан kennytm 12 August 2010 в 13:52
поделиться

10 ответов

Некоторым языкам встроили эту поддержку. Например, смотрите на java.math. BigDecimal в Java, или десятичное число. Десятичное число в Python.

Другие языки часто имеют библиотеку в наличии для обеспечения этой функции. Например, в C Вы могли использовать GMP или другие опции.

раздел "Arbitrary-precision software" эта статья дает хорошее краткое изложение Ваших опций.

14
ответ дан 29 November 2019 в 22:43
поделиться

Java исходно может сделать операции сверхбольшого числа с BigDecimal. GMP является defacto стандартной библиотекой для сверхбольшого числа с C/C++.

1
ответ дан 29 November 2019 в 22:43
поделиться

Схема (изменение шепелявости) имеет возможность, названную 'сверхбольшим числом'. существует много хороших реализаций схемы доступные и полные языковые среды и встраиваемые опции сценариев. некоторые я могу ручаться за

MitScheme (также называемый схемой гну) Хитрость PLTScheme Chezscheme (также проект гну) Схема 48

3
ответ дан 29 November 2019 в 22:43
поделиться

Если Вы хотите работать в мире.NET, можно использовать, все еще используют java.math. Класс BigDecimal. Просто добавьте ссылку на vjslib (в платформе), и затем можно использовать классы Java.

большая вещь, они могут использоваться fron любой язык.NET. Например, в C#:

    using java.math;

    namespace MyNamespace
    {
        class Program
        {
            static void Main(string[] args)
            {
                BigDecimal bd = new BigDecimal("12345678901234567890.1234567890123456789");

                Console.WriteLine(bd.ToString());
            }
        }
    }
1
ответ дан 29 November 2019 в 22:43
поделиться

В языке Common LISP,

(format t "~D~%" (expt 7 77))

" ~D ~ %" в printf формате был бы "%d\n". Арифметика произвольной точности встроена в язык Common LISP.

6
ответ дан 29 November 2019 в 22:43
поделиться

Многие люди рекомендовали десятичный модуль Python, но я рекомендую использовать mpmath по десятичному числу для любого серьезного числового использования.

5
ответ дан 29 November 2019 в 22:43
поделиться

Python имеет такую способность. Существует превосходный пример здесь .

От статьи:

from math import log as _flog
from decimal import getcontext, Decimal

def log(x):
    if x < 0:
        return Decimal("NaN")
    if x == 0:
        return Decimal("-inf")
    getcontext().prec += 3
    eps = Decimal("10")**(-getcontext().prec+2)
    # A good initial estimate is needed
    r = Decimal(repr(_flog(float(x))))
    while 1:
        r2 = r - 1 + x/exp(r)
        if abs(r2-r) < eps:
            break
        else:
            r = r2
    getcontext().prec -= 3
    return +r

кроме того, учебное руководство по быстрому запуску Python обсуждает произвольную точность: http://docs.python.org/lib/decimal-tutorial.html

и описывает getcontext:

getcontext () функциональные доступы текущий контекст и позволяет настройкам быть измененными.

Редактирование: Добавленное разъяснение по поводу getcontext.

5
ответ дан 29 November 2019 в 22:43
поделиться

Mathematica.

N[Pi, 100]

3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068

Не только делает mathematica, имеют произвольную точность, но и по умолчанию это имеет бесконечную точность. Это сохраняет вещи как 1/3 как rationals и даже выражения, включающие вещи как Sqrt[2], который это поддерживает символически, пока Вы не просите числовое приближение, которое Вы можете иметь к любому количеству десятичных разрядов.

11
ответ дан 29 November 2019 в 22:43
поделиться

КОБОЛ

77 VALUE PIC S9(4)V9(4). 

переменная ведьма со знаком 4 десятичных числа.

МН/1

DCL VALUE DEC FIXED (4,4);

:-) Я не могу помнить другой старый материал...

Шутки независимо, как мое шоу в качестве примера, я думаю, что Вы не должны выбирать язык программирования в зависимости от единственной функции. Фактически весь достойная и недавняя поддержка языка зафиксировала точность в некоторых специализированных классах.

3
ответ дан 29 November 2019 в 22:43
поделиться

Судя по всему, они также есть в Tcl, начиная с версии 8.5, благодаря LibTomMath:

http://wiki.tcl.tk/5193
http://www.tcl.tk/cgi-bin/tct/tip/237.html
http://math.libtomcrypt.com/
2
ответ дан 29 November 2019 в 22:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: