2016-04-11 2 views
0

В java, если у нас есть операция, подобная приведенной ниже, которая использует только целые числа и умножение и деление, возможно ли, что result не будет равно int3 из-за потери точности?Можно ли потерять точность при использовании только умножения и деления целых чисел? Как насчет использования парных?

Int int1, int2, int3 = some values 
Double result = ((((int1/int2) * int3)/ int3)* int2) 

Edit: Что делать, если у нас есть Double int1, int2, int3 = some values?

Спасибо.

+0

Да, на самом деле это, безусловно, не будет так, как вы делаете ** Целочисленная ** арифметика, и это вызывает ** усечение ** - так, например, '3/2' будет '1'. –

+0

Эта услуга полезная: [java-maximum-loss-of-precision] (http://stackoverflow.com/questions/13470757/java-maximum-loss-of-precision-in-one-double-addition-subtraction) – user1819676

+0

На самом деле это не так важно, поскольку вы выполняете арифметику 'int'. –

ответ

4

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

Например:

int int1 = 1; 
int int2 = 2; 
int int3 = 3; 

double result = (((int1/int2) * int3)/int3) * int2; 

... дает ноль, потому что int1/int2 равен нулю.

Помимо этого, существует возможность переполнения на стороне умножения вещей.

1

В java, в любое время, когда вы делите int на другой int, вы рискуете потеря точности. Итак, короткий ответ на ваш вопрос - да. Больше информации о целочисленном делении в этом учебнике: http://mathbits.com/MathBits/Java/DataBasics/Mathoperators.htm

Смежные вопросы