una samsung imprimir impresoras impresora desde descargar cualquier con compatibles como iphone cocoa-touch double precision nslog

iphone - samsung - impresoras compatibles con airprint



¿Cómo imprimir un doble con total precisión en iOS? (5)

Intenta esto, este trabajo para mi

NSLog (@ "% @", [NSString stringWithFormat: @ "% f", distancia]);

Caso de prueba:

NSLog(@"%f", M_PI); NSLog(@"%@", [NSString stringWithFormat:@"%f", M_PI]); NSLog(@"%@", [NSNumber numberWithDouble:M_PI]);

Resultados:

3.141593
3.141593
3.141592653589793

Conclusiones:

1) La impresión a través de NSLog () o [NSString stringWithFormat] proporciona una precisión muy baja ...

2) La impresión a través de [NSNumber numberWithDouble] proporciona una mejor precisión ...

Hubiera esperado obtener un resultado mucho más cercano al valor original: 3.14159265358979323846264338327950288 (como se define en math.h)

¿Alguna pista?


Las dos primeras líneas se redondean a 6 decimales porque esa es la longitud de redondeo predeterminada para printf heredada de C.

La tercera línea muestra los datos con la máxima precisión útil: un número de punto flotante IEEE 754 64bit tiene un poco menos de 16 dígitos decimales de precisión, por lo que todos esos dígitos del literal en math.h son inútiles (tal vez se pueden ver como prueba de futuro frente a una posible redefinición futura en un formato con más precisión).


Prueba esto:

NSLog(@"%.20f", M_PI);


Tal vez un poco tarde para responder, pero alguien podría encontrar estos problemas:

Debe usar doble largo con un formato máximo de 20 dígitos @ .20Lg . Los dobles largos son puntos flotantes de 80 bits, por lo que no obtendrás una mejor precisión que esa. Tenga en cuenta también que a partir de XCode 4.3.2 las constantes no están en doble notación larga, incluso si los muchos dígitos sugieren un doble súper largo ;-)

NSLog(@"%.21g", M_PI); // with cast because M_PI is not defined as long double NSLog(@"%.21Lg", (long double)M_PI); // with corrected long double representation (#.####L): // v from here on overhead NSLog(@"%.21Lg", 3.14159265358979323846264338327950288L); // alternative for creating PI NSLog(@"%.21Lg", asinl(1.0)*2.0); // and a funny test case: NSLog(@"%.21Lg", asinl(1.0)*2.0 - M_PI); // on second thought, not that funny: should be 0.0

los resultados son:

p[5528:f803] 3.141592653589793116 (actually 16 digits standard double precision) p[5528:f803] 3.141592653589793116 p[5528:f803] 3.14159265358979323851 p[5528:f803] 3.14159265358979323851 p[5575:f803] 1.22514845490862001043e-16 (should have been 0.0)


NSLog(@"%@", [NSDecimalNumber numberWithDouble:M_PI]);

un poco más de precisión