language-agnostic - 对于 IEEE-754,0 < ABS(const) < 1,(x/const) * const 是否保证为 X 的不同值返回不同的结果?

标签 language-agnostic math floating-point rounding ieee-754

假设我执行此操作:

(X / const) * const

使用 IEEE 754-2008 定义的 double 参数,先除法,再乘法。
const0 < ABS(const) < 1 范围内.

假设操作成功(没有发生溢出),X 的不同参数这个操作保证返回不同的结果?

换句话说,有没有X1 , X20 < ABS(const) < 1这样X1 <> X2 , 但是 (X1 / const) * const = (X2 / const) * const ?

最佳答案

是的。

公共(public)类TestDoubleDivision
{
公共(public)静态无效主要(字符串 [] 参数)
{
最终随机随机=新随机();
诠释 i = 0;
而 (i < 10)
{
最终双 c = random.nextDouble();
最终双 x1 = 10.0 * random.nextDouble();
最终双 x2 = nextDouble(x1);

如果 (x1/c * c == x2/c * c)
{
System.out.printf("x1 = %.20f, x2 = %.20f, c = %.20f\n", x1, x2, c);
我++;
}
}
}

私有(private)静态双 nextDouble(双 d1)
{
返回 Double.longBitsToDouble(Double.doubleToLongBits(d1) + 1);
}
}

打印

x1 = 5.77383813703796800000,x2 = 5.77383813703796900000,c = 0.15897456707659440000
x1 = 2.97635611350670850000,x2 = 2.97635611350670900000,c = 0.15347615678619309000
x1 = 7.98634439050267450000,x2 = 7.98634439050267500000,c = 0.83202322046715640000
x1 = 0.11618686267768408000,x2 = 0.11618686267768409000,c = 0.09302449134082225000
x1 = 0.98646731978098480000,x2 = 0.98646731978098490000,c = 0.40549842805620606000
x1 = 3.95828649870362700000,x2 = 3.95828649870362750000,c = 0.75526917984495820000
x1 = 1.65404856207794440000,x2 = 1.65404856207794460000,c = 0.14500102367827516000
x1 = 5.72713430182017500000,x2 = 5.72713430182017550000,c = 0.68241935505532810000
x1 = 3.71143195248990980000,x2 = 3.71143195248991000000,c = 0.21294683305890750000
x1 = 5.66441726170857800000,x2 = 5.66441726170857900000,c = 0.69355199625947250000

关于language-agnostic - 对于 IEEE-754,0 < ABS(const) < 1,(x/const) * const 是否保证为 X 的不同值返回不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2230231/

相关文章:

math - 我应该在数学游戏中使用表达式解析器吗?

math - n 维 FFT 的计算复杂度

c++ - 除零以外的任何数字都会得到-1.#IND

mysql - 将 MySQL DECIMAL 转换为浮点 IEEE 表示形式的十六进制

language-agnostic - GUID 是否 100% 都是唯一的?

language-agnostic - C# 委托(delegate)、动态代理、闭包和函数指针之间有什么区别?

algorithm - 给定一个日期时间,计算太阳直接在头顶的纬度/经度坐标

algorithm - 在 Web 上创建动态 map

java - 尝试计算斜率时得到 0

matlab - MATLAB 中的浮点枚举