Вопрос

просто любопытно!но я заметил, что значение π, присвоенное SAS, на самом деле неверно.

например:

data _null_;
x= constant('pi') * 1000000000000000000000000000;
put x= 32.;
run;

дает значение π (3.)141592653589792961327005696

однако - π, конечно, (3.)1415926535897932384626433832795 ( http://www.joyofpi.com/pi.html ) - до 31 дп.

что дает??!!

Это было полезно?

Решение

SAS хранит PI как константу с точностью до 14 знаков после запятой.Разница, которую вы видите, — это артефакт математических операций с плавающей запятой, когда вы выполняли шаг умножения.

data _null_;
    pi=constant("PI");
    put pi= 32.30;
run;

/*В журнале */

pi=3.141592653589790000000000000000

Другие советы

PI поддерживается как константа во всех языках программирования с заданной точностью.Это не рассчитывается.Ваш код просто показывает, насколько точен PI в SAS.

У вас 16 цифр точности.Это означает, что он, вероятно, использует Представление с плавающей запятой двойной точности IEEE 754, что дает точность всего около 16-17 десятичных цифр.Невозможно представить число π каким-либо конечным числом цифр, поэтому любое компьютерное представление будет усечено до некоторого количества цифр.Существуют способы выполнения математических вычислений с произвольной точностью (в Java есть класс BigDecimal), но даже в этом случае вам придется где-то урезать число π.И математические вычисления, выполняемые таким образом, выполняются на несколько порядков медленнее (поскольку они не обрабатываются прямыми инструкциями процессора).

Как сказал Гарри Шатлер, оно считается постоянным.Обратите внимание, что небольшие дробные значения в числовых типах компьютерных языков редко бывают настолько точными (на самом деле их точность может быть ниже их точности), поскольку они хранятся как очень хорошие приближения, которыми можно быстро манипулировать.Если вам нужна исключительная точность (как в финансовых и научных целях), вам нужно использовать специальные типы, такие как Java. BigDecimal эта ручка является абсолютно точной (за счет скорости вычислений).(Извините, я не знаю SAS, поэтому не знаю аналога для BigDecimal.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top