对持有整数值的双精度变量进行算术运算是否准确?

2022-09-03 05:41:18

假设我在变量中存储了两个整数值,例如:double

double x = 100.0;
double y = 7.0;

我是否可以安全地假设对这两个双精度变量的任何算术运算都会产生整数结果,将返回一个精确的整数值(作为)?也就是说,例如,将包括:double

x + y = 107.0
x - y = 93.0
x * y = 700.0

返回的整数值精确,还是会出现一些精度问题?喜欢左右?x*y699.99995

一般问题:对两个持有整数值的双精度变量进行任何算术运算(将产生整数结果)将返回精确的整数值(作为双精度值)吗?

我在Java上下文中问这个问题,但我认为它在其他语言中也是类似的。


答案 1

只要操作的整数结果可以精确地表示为双精度值,您将获得精确的结果,但是一旦整数结果超过尾数中可用的位数(即 52+1 = 53 位),它就会被舍入。


答案 2

一般来说,答案是否定的。然而,我强烈建议阅读大卫·戈德堡(David Goldberg)的《每个计算机科学家都应该知道的关于浮点算术的知识》(What Every Computer Scientist Should Know About Floating-Point Arithmetic)——从内部了解这些东西永远不会有什么坏处。