6 votos

¿Por qué es menos preciso que $(1+x)^2$ pequeña $ (x+2)x+1$ $x$?

He sabido que la exactitud se basa en la cantidad de redondeos (o multiplicaciones) que se producen, pero de lo que puedo decir, ambas ecuaciones requieren la misma cantidad.

Mi primer pensamiento fue relacionado $(1+x)^2$ $1+2x+x^2$ y decir que hay dos redondeos obligatorios que sucedan, pero que la ecuación también es equivalente a $(x+2)x+1$, por lo que no tendría sentido hacer mi punto estándar de.

Cualquier ayuda será muy apreciada, gracias.

4voto

Vedran Šego Puntos 8041

Vamos a presuponer que $x \approx 10^{-(n-k)}$ donde $n$ es el número de dígitos significativos recordar (en el doble de la aritmética, esto es aproximadamente el $16$) y $k$ es un pequeño entero positivo. Ahora, compara:

  • $1+x$ sólo ha $k$ los dígitos significativos de $x$.

  • $x+2$ sólo ha $k$ los dígitos significativos de $x$.

No es realmente diferente. Pero, vamos a ir en:

  • $(1+x)^2$ es un cuadrado de un número que sólo ha $k$ los dígitos significativos de $x$, así que sólo los $k$ dígitos de la materia.

  • $(x+2)x$ es un número con sólo $k$ los dígitos significativos de $x$ multiplicado por el conjunto de la $x$ (con la multiplicación, no se pierde dígitos significativos), por lo que el conjunto de $x$ es importante (no completamente, por supuesto, pero hasta un cierto punto; hay que recordar que una buena parte de ella - $n-k$ dígitos - se perdió en $x+2$).

Ahora, para el final de "+1":

  • $(x+2)x + 1$ ha perdido muchos de los dígitos de nuevo. Sin embargo, si $(x+2)x - 2$ tiene más dígitos significativos de $x$, (por ejemplo, si el primer dígito significativo de $x$ $4$ o más), de más de $x$ ha sobrevivido. Más precisamente, en ese caso, $k+1$ dígitos de $(x+2)x$ han sobrevivido, y este dígito más tiene algún impacto de $x$, como se explicó anteriormente.

Como ejemplo, aquí está un poco de C código:

#include <stdio.h>

int main() {
  double x = 0.000000000000654, t;
  t = 1+x;
  t *= t;
  printf("(1+x)^2  = %.16f\n", t);
  t = x+2;
  t *= x;
  t += 1;
  printf("(x+2)x+1 = %.16f\n", t);
  t = x*x;
  t += 2*x;
  t += 1;
  printf("x^2+2x+1 = %.16f\n", t);
  t = 1;
  t += 2*x;
  t += x*x;
  printf("1+2x+x^2 = %.16f\n", t);
  return 0;
}

Resultados:

(1+x)^2  = 1.0000000000013078
(x+2)x+1 = 1.0000000000013081
x^2+2x+1 = 1.0000000000013081
1+2x+x^2 = 1.0000000000013081

En Mathematica, calculada con la $20$ dígitos de precisión:

x = 654/10^16;
N[(x + 1)^2, 20]

El resultado:

1.0000000000001308000

Tenga en cuenta que $2 \cdot 654 = 1308$. Calculada con la $33$ dígitos de precisión, por encima de los rendimientos

1.00000000000013080000000000427716

así que obviamente han calculado el $2x$ parte con mejor precisión en los últimos $3$ expresiones (en mi código C) que en la primera.

0voto

Mike Puntos 1113

Una heurística explicación: supongamos que $x$ es muy pequeña; a continuación, el punto flotante de aproximación a $1+x$ será a menudo erróneas debido a que la 'flota de redondeo': por ejemplo, suponga que tiene 10 dígitos de core 'float' precisión y que $x\approx 10^{-8}$; a continuación, $1+x$ va a perder todo, pero dos dígitos de $x$'s de la precisión, y cuando nos cuadrado de $1+x$, a continuación, el resto de los dígitos estancia perdido. Por el contrario, cuando la adición de $2+x$ podemos perder otro poco de precisión en un principio, pero el resultado se multiplica por $x$ e esta multiplicación de las ganancias de la 'veracidad' de su segundo $x$ factor.

(Por otro lado, el hecho de que $1$ se añade a continuación el resultado me deja escéptico, porque mucho de que la precisión es de inmediato perdió de nuevo; me gustaría que esta explicación mucho más si se comparan por ejemplo, $(x+2)x$ vs $(x+1)^2-1$.)

0voto

abiessu Puntos 5519

En la aritmética de intervalos, esta pregunta se responde de manera diferente de lo que usted puede esperar. En particular, la precisión de cada fórmula puede ser rigurosamente comprobados directamente por la evaluación de cada vez más pequeños intervalos hasta el límite de precisión del sistema.

Aquí está un ejemplo de cómo funciona:

Dado $x=[a,b]$ como el intervalo de ser evaluados con $a\lt b$, evaluar las siguientes:

$$f_1(x)=(x+1)^2$$

$$f_2(x)=(x+2)x+1$$

$$f_3(x)=x^2+2x+1$$

$$f_1([a,b])=([a,b]+1)^2=[a+1,b+1]^2=[\min((a+1)^2,(b+1)^2),\max((a+1)^2,(b+1)^2)]$$

$$f_2([a,b])=([a,b]+2)[a,b]+1=[a+2,b+2][a,b]+1=[\min(a(a+2),a(b+2),b(a+2),b(b+2))+1,\max(a(a+2),a(b+2),b(a+2),b(b+2))+1]$$

$$f_3([a,b])=[a,b]^2+2[a,b]+1=[\min(a^2,b^2),\max(a^2,b^2)]+[2a,2b]+1=[\min(a^2,b^2)+2a+1,\max(a^2,b^2)+2b+1]$$

Dado que sólo sabemos que $a\lt b$, $f_1$ y $f_3$ presentan la mayor similitud, pero debería ser obvio que si $|a|\gt|b|$$f_1\ne f_3$. Si decimos que una medida de la precisión es la relación de la longitud de la entrada de intervalo en comparación a la longitud del intervalo de salida de datos, a continuación, $f_1$ tiene una exactitud superior al $f_3$ total.

Esta no es la mejor demostración de cómo la aritmética de intervalos funciona, pero debe mostrar cómo los intervalos pueden ser utilizados en la evaluación de funciones. En particular, es claro que la exactitud es la opuesta a la que se ha demostrado en otras respuestas aquí.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by: