Точность натурального логарифма в CLISP не верна.Что может быть не так? - PullRequest
1 голос
/ 14 апреля 2011

Что пошло не так?

 [1]> (log (exp 1))
 0.99999994

Ответы [ 2 ]

10 голосов
/ 14 апреля 2011

Это связано с конечной точностью представления чисел с плавающей точкой дробных чисел.

Пожалуйста, смотрите: http://en.wikipedia.org/wiki/Floating_point

(exp 1) будет приближаться к e (который требует бесконечной точности для идеального представления). Натуральный логарифм этого приближения будет приблизительно (но не точно) 1. Понимание представления с плавающей точкой позволит вам понять, почему это происходит.

CLISP использует собственное представление поплавков в архитектуре вашей машины. Чаще всего это представление представлено в одном из форматов, определенных IEEE 754 (обычно 32- или 64-битный; в вашем случае это выглядит как 32-битный). В двух словах, дробные части представлены суммой обратных степеней 2 (, т.е. , некоторая комбинация 1/2, 1/4, 1/8, ... 1/2^32, и т.д. ) * * тысяча двадцать-одна

2 голосов
/ 14 апреля 2011

Попробуйте с двойной точностью с плавающей точкой:

(log (exp 1.0d0))

=> 1.0D0; по крайней мере, в Clozure CL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...