Немного утечки с плавающей запятой в (Im) точность, часть 1

голоса
16

Большинство математиков согласны, что:

е πi + 1 = 0

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

Я заинтересован, чтобы услышать о разных языках и реализации, а также различные методы, чтобы сделать результат как можно ближе к нулю, насколько это возможно. Будь креативным!

Задан 04/08/2008 в 07:21
источник пользователем
На других языках...                            


10 ответов

голоса
16

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

PI представляет собой бесконечный ряд цифр, которые никто не могли обозначать что-либо иное, чем символическое представление, а е ^ X такие же, и, таким образом, единственным способом получить до 100% точности, чтобы идти символическими.

Ответил 26/12/2008 d 21:22
источник пользователем

голоса
8

Вот краткий список реализаций и языков я пробовал. Это отсортированный по близости к нулю:

  • Схема: (+ 1 (make-polar 1 (atan 0 -1)))
    • 0.0+1.2246063538223773e-16i(Ш схема, MIT схема)
    • 0.0+1.22460635382238e-16i(Коварство)
    • 0.0+1.22464679914735e-16i(курица с numbersяйцом)
    • 0.0+1.2246467991473532e-16i(MzScheme, SISC, Гоши, Гамбит)
    • 0.0+1.2246467991473533e-16i(СКМ)
  • Common Lisp: (1+ (exp (complex 0 pi)))
    • #C(0.0L0 -5.0165576136843360246L-20)(CLISP)
    • #C(0.0d0 1.2246063538223773d-16)(CMUCL)
    • #C(0.0d0 1.2246467991473532d-16)(SBCL)
  • Perl: use Math::Complex; Math::Complex->emake(1, pi) + 1
    • 1.22464679914735e-16i
  • Python: from cmath import exp, pi; exp(complex(0, pi)) + 1
    • 1.2246467991473532e-16j(CPython)
  • Рубин: require 'complex'; Complex::polar(1, Math::PI) + 1
    • Complex(0.0, 1.22464679914735e-16)(МРТ)
    • Complex(0.0, 1.2246467991473532e-16)(JRuby)
  • Р: complex(argument = pi) + 1
    • 0+1.224606353822377e-16i
Ответил 04/08/2008 d 07:22
источник пользователем

голоса
5

Можно ли решить этот спор?

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

На самом деле, как можно представить I (или J для инженеров) в обычном языке программирования?

Возможно, лучший пример это грех (π) = 0? (Или я опять пропустил пункт?)

Ответил 04/08/2008 d 07:29
источник пользователем

голоса
4

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

Если вам нужно больше точности необходимо использовать другое представление чисел. Так же, как если вы делаете целочисленную арифметику на номера, которые не помещаются в междунар или долго. Некоторые языки имеют библиотеки для этого встроенного (я знаю, что Java имеет BigInteger и BigDecimal), но вы должны явно использовать эти библиотеки вместо собственных типов, а производительность будет (иногда значительно) хуже, чем если бы вы использовали поплавки.

Ответил 25/08/2008 d 14:37
источник пользователем

голоса
4

@Ryan Fox

На самом деле, как можно представить I (или J для инженеров) в обычном языке программирования?

Native сложных типов данных далеки от неизвестно. Fortran было это в середине шестидесятых годов, и ФП имеет ряд других языков, которые поддерживают их в последующем наблюдении чужого.

И комплексные числа могут быть добавлены другие языки, библиотеки (с оператором перегрузки они даже выглядят так же, как и собственные типы в коде).

Но если вы не предоставите особый случай для этой проблемы, «несогласие» просто выражение неточной машинной арифметики, нет? Это как жалуется, что

float r = 2/3;
float s = 3*r;
float t = s - 2;

заканчивается (т! = 0) (по крайней мере, если вы используете достаточно тупой компилятор) ...

Ответил 25/08/2008 d 14:29
источник пользователем

голоса
4

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

Ответил 25/08/2008 d 02:10
источник пользователем

голоса
2

Я имел looooong чатов кофе с моим лучшим приятелем говорить о иррациональных числах и различии между другими номерами. Ну, мы оба согласны в этой другой точке зрения:

Иррациональные числа отношений, как функции, таким образом, каким образом? Ну, подумайте о том, «если вы хотите идеальный круг, дайте мне идеальный пи», но круги Diferent на другие фигуры (4-х сторон, 5, 6 ... 100, 200), но ... Сколько еще стороны сделать у вас есть, больше похоже на круг это выглядеть. Если вы следовали за мной до сих пор, соединяющие все эти идеи здесь формула пи: введите описание изображения здесь

Таким образом, р является функцией, но один, который никогда не заканчивается! из-за параметр ∞, но мне нравится думать, что вы можете иметь «экземпляр» пи, если изменить параметр ∞ для очень большого Int, вы будете иметь очень большой экземпляр пи.

То же самое с е, дают мне огромный параметр, я дам вам огромный е.

Собираем все идеи вместе:

Как у нас есть ограничения на память, язык и ЛИЭС предоставляют нам огромный экземпляр иррациональных чисел, в этом случае, пи и е, как конечный результат, вы будете иметь длинный ПОДХОД, чтобы получить 0, как и в примерах, предоставленных Jester-@ Крис Янг

Ответил 06/05/2017 d 03:07
источник пользователем

голоса
2

Это ограничение наших текущих вычислений с плавающей точкой вычислительных архитектур. Арифметика с плавающей точкой является лишь приближением числовых полюсов, как е или пи (или что-нибудь за пределами точности ваших биты позволяют). Я действительно наслаждаюсь эти цифры, потому что они не поддаются классификации, и по-видимому, имеют большую энтропию (?), Чем даже простые числа, которые являются канонической серии. численное соотношение Defy, которую иногда простые вещи, как это может взорвать ум человека (я люблю его).

К счастью , целые языки и библиотеки могут быть посвящены точностями тригонометрических функций с помощью обозначений понятия (подобного тем , что описан Ласс В. Карлсны ).

Рассмотрим библиотека / язык , который описывает такие понятия , как е и пи в форме, машина может понять. Должна ли машина любое представление о том , что идеальный круг? Вероятно , нет, но мы можем создать объект - круг , который удовлетворяет все известные функции мы относим к нему (постоянный радиус, отношение радиуса к окружности равно 2 * пи * г = С). Объект , как пи описывается только вышеупомянутым отношением. г и С могут быть числовые объекты , описываемые любой точностью вы хотите , чтобы дать им. е может быть определен « как е является единственным действительным числом таким , что значение производной (наклон линии тангенса) функция Р (х) = ех в точке х = 0 в точности 1» из википедии .

Fun вопрос.

Ответил 20/11/2009 d 21:37
источник пользователем

голоса
2

Численный анализ учит нас, что вы не можете рассчитывать на точном значении малых различий между большими числами.

Это не только влияет на уравнение вопроса здесь, но может привести к нестабильности все, от решения почти-сингулярного множества одновременных уравнений, посредством нахождения нулей полиномов, к оценке журнала (~ 1) или ехр (~ 0) ( Я даже видел специальные функции для оценки журнала (х + 1) и (ехр (х) -1), чтобы обойти это).

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

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


Если это звучит немного покровительственно, я извиняюсь. Мой «Численный анализ 101» была часть моего курса химии, так как там не было много CS в те дни. Я на самом деле не почувствовать место / значение имеет численный анализ в современном CS конечно.

Ответил 26/12/2008 d 22:22
источник пользователем

голоса
2

На самом деле, как можно представить I (или J для инженеров) в обычном языке программирования?

В языке , который не имеет нативную представление, его обычно добавляют с помощью ООП создать Complexкласс для представления iи j, с оператором перегрузки , чтобы правильно работать с операциями с участием других Complexномеров и или другие цифровые примитивы произрастающих языка.

Например: Complex.java , C ++ <комплекс>

Ответил 25/08/2008 d 14:48
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more