Rob*_*rto 2 c# floating-point floating-accuracy
如果我们使用float,则数字可以有多个表示,因此浮点除法的结果可能会产生按位不同的浮点数.但是,如果分母是2的幂?
AFAIK除以2的幂只会移动指数,留下相同的尾数,总是产生逐位相同的浮点数.是对的吗?
float a = xxx;
float result = n/1024f; // always the same result?
Run Code Online (Sandbox Code Playgroud)
---更新----------------------
很抱歉我对于浮点数的IEEE黑魔法缺乏了解:),但我在谈论Guvante提到的那些数字:没有某些十进制数字的表示,'不准确'的浮点数.对于这篇文章的其余部分,考虑到Guvante对这些词的定义,我将使用"准确"和"不准确".
为简化起见,假设分子总是一个"准确"的数字.另外,让我们除以2的任何幂,但总是为1024.另外,我每次都以相同的方式进行操作(相同的方法),所以我说的是在不同的执行中得到相同的结果(对于相同的输入,当然).
我问这一切是因为我看到不同的数字来自相同的输入,所以我想:如果我只使用'准确'浮点数作为分子并除以1024我只会移动指数,仍然有'准确'的浮点数.
你问了一个例子.真正的问题是:我有一个模拟器有时产生0.02999994,有时相同输入产生0.03000000.我想我可以将这些数字乘以1024,得到一个'整数'('精确'浮点数),对于这两个数字是相同的,然后除以1024得到一个'精确'的圆形浮点数.
我被告知(在我的另一个问题中)我可以转换为十进制,圆形和转换为浮动,但我想知道这种方式是否有效.
如果我们使用浮点数,则数字可以有多个表示
这个问题似乎是以不正确的前提为基础的; 作为浮点数具有多个表示的唯一数字是零,可以表示为"正零"或"负零".除了零之外,给定数字只有一个表示形式为浮点数,假设您正在谈论"双"或"浮点"类型.
或许我误解了.问题是您指的是允许编译器以比可用于存储的32或64位更高的精度执行浮点运算吗?在某些情况下,这会导致分裂和乘法产生不同的结果.