如何以最高精度比较小数点后30位的双数?
how to compare double number with 30 decimal places with the highest precision?
我需要比较两个小数点后 30 位的大十进制数。我还需要检测小数点后 30 位的差异,所以在我的需要中:
double number_1=80.004752165027610999459284357728;
double number_2=80.004752165027610999459284357727;
导致这个:
double result = 0.000000000000000000000000000001
由于数字本身的性质,这似乎是不可能的(我已经尝试使用 float,long double)。我只有一组有限的小数位可以操作。那么在那种情况下我怎样才能达到更好的精度呢?也许我可以使用一些框架的功能?我在 nsnumber 和 google
中没有发现任何有用的东西
您可以使用 NSDecimalNumber
。它最多可以处理 38 位数字。
NSDecimalNumber, an immutable subclass of NSNumber, provides an
object-oriented wrapper for doing base-10 arithmetic. An instance can
represent any number that can be expressed as mantissa x 10^exponent
where mantissa is a decimal integer up to 38 digits long, and exponent
is an integer from –128 through 127.
我需要比较两个小数点后 30 位的大十进制数。我还需要检测小数点后 30 位的差异,所以在我的需要中:
double number_1=80.004752165027610999459284357728;
double number_2=80.004752165027610999459284357727;
导致这个:
double result = 0.000000000000000000000000000001
由于数字本身的性质,这似乎是不可能的(我已经尝试使用 float,long double)。我只有一组有限的小数位可以操作。那么在那种情况下我怎样才能达到更好的精度呢?也许我可以使用一些框架的功能?我在 nsnumber 和 google
中没有发现任何有用的东西您可以使用 NSDecimalNumber
。它最多可以处理 38 位数字。
NSDecimalNumber, an immutable subclass of NSNumber, provides an object-oriented wrapper for doing base-10 arithmetic. An instance can represent any number that can be expressed as mantissa x 10^exponent where mantissa is a decimal integer up to 38 digits long, and exponent is an integer from –128 through 127.