|
|
1
3
它被很好地定义为
不,您不能完美地解决截断/舍入这一问题。考虑一下,一个实现
没有取整算法可以解决这个问题。 您有两种选择:
btw,如果输入
|
|
2
5
不,舍入不是一种消除小误差的策略,也不是保证与误差计算一致。 对于将数字线切片到范围内的任何情况,您将成功地消除最轻微的偏差(将它们放在同一个桶中并夹紧到相同的值),但如果原始值对跨过边界,则会大大增加偏差。 在您的特定情况下,硬编码最低有效字节,即非常接近的值
和
只有一个极限偏差…但在四舍五入后,它们相差256 ulp。哎呀! |
|
|
3
2
你所做的完全,完全被误导了。 你的问题不是你得到了不同的结果(2.36比2.47)。你的问题是,这些结果中至少有一个,可能两者都有巨大的错误。你的windows和android结果不仅不同,而且是错误的。(至少有一个,你不知道是哪一个)。 找出为什么你会得到这些巨大的误差,并改变你的算法,以避免大量增加微小的舍入误差。或者你有一个内在混乱的问题,在这种情况下,结果之间的差异实际上是非常有用的信息。 你所尝试的只是使舍入误差大256倍,如果两个不同的结果以……1ff和……200十六进制结尾,那么你将它们更改为……180和……280,这样即使是稍微不同的数字之间的差也可以增加一个因子256。 在一台bigendian机器上,你的代码会变成kaboom!!!! |
|
|
4
0
您的函数由于别名而无法工作。
允许为temp强制转换为无符号char*,因为char*强制转换是别名规则的例外。这对于诸如read、write、memcpy等函数是必需的,这样它们就可以在字节表示之间复制值。 但是,不允许您写入temp[0],然后假定舍入已更改。您必须创建一个新的双变量(在堆栈上很好),并将memcpy temp返回到该变量。 |
|
|
Leo · 为什么carg(-0)返回-pi? 1 年前 |
|
Fyodor · 在C中使用sin和cos计算数学表达式不正确? 1 年前 |
|
|
Alexander · 为什么数字的输出不同? 1 年前 |
|
Ronny · 如何防止程序返回“inf”? 1 年前 |
|
|
EMS · 为什么双重打印的值与C中的浮点值相同,而它们的大小不同? 2 年前 |
|
|
Dakolas · 对python十进制库感到困惑 2 年前 |
|
|
RTC222 · 无法获取vrndscalepd的正确舍入模式代码 2 年前 |