在 SAS 中添加两个大数时,为啥结果是荒谬的?
Posted
技术标签:
【中文标题】在 SAS 中添加两个大数时,为啥结果是荒谬的?【英文标题】:When adding two large numbers in SAS, why are the results nonsensical?在 SAS 中添加两个大数时,为什么结果是荒谬的? 【发布时间】:2022-01-16 16:12:04 【问题描述】:下面是一些示例代码:
PROC SQL noprint;
CREATE TABLE check AS
SELECT *, round(var1,1e16) + round(var2,1e16) as final
FROM dir.A;
QUIT; RUN;
我添加的数字是 -3.0584695E31 和 3.058469E31,总和是 4.5035996E15,但实际上,总和应该在 ~1000 左右。
【问题讨论】:
***.com/questions/588004/… 【参考方案1】:SAS 中的所有数字都是floating point values,精度约为 16 位。这对应于大多数编程语言和数据库中的"double precision"。
当使用大约 1E31 的值进行计算时,您应该预计会出现大约 1E31/1E16 的误差,即 1E15。
【讨论】:
这对了解绝对有帮助【参考方案2】:您想要做的是围绕结果。对中间步骤进行四舍五入几乎是无关紧要的——两个四舍五入的数字之间的空间仍然有些模糊,除非它恰好已经是一个精确的差异。在某些情况下您可能看不到太大差异,但在其他情况下您会看到很多差异(尤其是当您期望,例如,两个数字之和为零时)。
PROC SQL noprint;
CREATE TABLE check AS
SELECT *, round(var1+var2,1e16) as final
FROM dir.A;
QUIT;
【讨论】:
以上是关于在 SAS 中添加两个大数时,为啥结果是荒谬的?的主要内容,如果未能解决你的问题,请参考以下文章
jmeter察看结果树结果,为啥响应断言为true时,也是红色的?
为啥 LinearRegression() 预测的结果是荒谬的?
SAS多重比较结果怎么看 为啥有空行,是否1%和5%????两个值