Потеря точности с плавающей запятой в вычислениях Python numpyPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Потеря точности с плавающей запятой в вычислениях Python numpy

Сообщение Anonymous »

У меня очень странная ситуация: я вычисляю угол между двумя векторами в сферической системе координат. Сначала я вычисляю скалярное произведение двух векторов. Вычисление с использованием массива numpy дает результат с относительной точностью 10^(-16), как и должно быть для 64-битных чисел с плавающей запятой. Но затем я вызываю acos, и угол скалярного произведения numpy дает относительную точность 10^(-11), т.е. на 5 порядков или величину хуже по сравнению с прямым вычислением (что является правильным результатом). Есть идеи, почему?
#!/usr/bin/python
import numpy as np
import math

def testPrecision(theta1, phi1, theta2, phi2):

# We define two vectors as numpy arrays
t1 = np.array([math.sin(theta1) * math.cos(phi1), math.sin(theta1) * math.sin(phi1), math.cos(theta1)])
t2 = np.array([math.sin(theta2) * math.cos(phi2), math.sin(theta2) * math.sin(phi2), math.cos(theta2)])

# scalar product of vectors using numpy
scalarProd1 = np.einsum('i,i', t1, t2)

# scalar product of vectors without numpy
scalarProd2 = math.sin(theta1) * math.cos(phi1) * math.sin(theta2) * math.cos(phi2) + math.sin(theta1) * math.sin(phi1) * math.sin(theta2) * math.sin(phi2) + math.cos(theta1) * math.cos(theta2)

print("Scalar product:\nnumpy = {:.15e} vs direct = {:.15e}".format(scalarProd1, scalarProd2))

alpha1 = math.acos(scalarProd1)
alpha2 = math.acos(scalarProd2)

print("Angle:\nnumpy = {:.15e} vs direct = {:.15e}".format(alpha1, alpha2))

testPrecision(theta1 = 1.745329251994330e-02, theta2 = 2.154759397163566e-02, phi1 = 1.745329251994329e-01, phi2 = 2.078144368653071e-01)

Результат
Scalar product:
numpy = 9.999914101231913e-01 vs direct = 9.999914101231911e-01
Angle:
numpy = 4.144849600753233e-03 vs direct = 4.144849600780019e-03


Подробнее здесь: https://stackoverflow.com/questions/788 ... lculations
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Потеря точности с плавающей запятой в вычислениях Python numpy
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Возможная потеря точности во время преобразования числа с плавающей запятой.
    Anonymous » » в форуме JAVA
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • C ++ Потеря точности во время расчета плавающей запятой?
    Anonymous » » в форуме C++
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Числа с плавающей запятой двойной точности и одинарной точности?
    Anonymous » » в форуме Python
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Как уменьшить ошибку с плавающей запятой в рекурсивных вычислениях DSP
    Гость » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Гость

Вернуться в «Python»