Если вы хотите деконструировать число с плавающей запятой, давайте сначала удостоверимся, что это большое число.
скажем z: 34.1
Вы можете получить доступ к частям большого плавания с помощью lisp, а также вы можете получить доступ к длине мантиссы в битах с помощью ?fpprec
.
Таким образом ?second(z)*2^(?third(z)-?fpprec)
дает вам:
4799148352916685/140737488355328
и bfloat(%)
дает вам:
3.41b1.
Если вы хотите, чтобы мантисса z была целым числом, посмотрите на ?second(z)
Теперь я не уверен, что вы пытаетесь достичь в базе 10, но Максима
не выполняет внутреннюю арифметику в базе 10.
Если вы хотите больше или меньше битов, вы можете установить fpprec,
который связан с ?fpprec
. fpprec - это «приблизительная базовая 10» точность.
Таким образом, fpprec изначально 16
?fpprec
соответственно 56.
Вы можете легко изменить их оба, например, fpprec: 100
соответствует ?fpprec
из 335.
Если вы возитесь с представлениями с плавающей точкой, вам может быть полезно знать
что вы можете посмотреть на любой из списков, набрав, например,
?print(z)
, которая печатает внутреннюю форму, используя функцию печати Lisp.
Вы также можете отследить любую функцию, вашу или системную.
Например, вы можете рассмотреть возможность сделать это:
trace(append,rnd,integrate);
Если вы хотите использовать машинные поплавки, я предлагаю вам использовать для последней строки
для n с 30 по 1 шаг -1 выполните:
Ibwd:append([[n-1,rnd(1/(2.0*n- 1.0)-a*last(first(Ibwd)),d)]],Ibwd);
Обратите внимание на десятичные точки. Но даже этого не достаточно, потому что интеграция
вставляет точные структуры, такие как atan (10). Попытка округлить эти вещи, или вычислить журнал
из них, вероятно, не то, что вы хотите сделать. Я подозреваю, что Maxima недовольна, потому что журналу дается какое-то грязное выражение, которое оказывается отрицательным, хотя изначально оно считало иначе. Он передает номер программе регистрации lisp, которая с радостью возвращает соответствующий объект комплексного числа Common-lisp. К сожалению, большая часть Maxima была написана ДО того, как LISP имели сложные номера.
Таким образом, результат (log -0.5)= #C(-0.6931472 3.1415927)
совершенно неожидан для остальной части Maxima. Максима имеет свою форму для комплексных чисел, например, 3+4*%i
.
В частности, программа отображения Maxima предшествует общему формату комплексных чисел lisp и не знает, что с ним делать.
Ошибка (переполнение стека !!!) из программы дисплея, пытающейся отобразить общее комплексное число lisp.
Как все это исправить? Ну, вы можете попробовать изменить свою программу, чтобы она вычисляла то, что вы действительно хотите, и в этом случае она, вероятно, не вызовет эту ошибку. Программа отображения Maxima тоже должна быть исправлена. Кроме того, я подозреваю, что есть кое-что неудачное в упрощении журналов чисел, которые являются отрицательными, но не очевидно так.
Возможно, это слишком много информации для оригинального плаката, но, возможно, параграф выше поможет, а также, возможно, улучшит Maxima в одном или нескольких местах.