调试一些与财务相关的SQL代码发现了数学(24,8)数学精度的奇怪问题.
在MSSQL上运行以下查询,您将获得A + B*C表达式结果为0.123457
SELECT A,B,C,A + B*C FROM(选择CAST(0.12345678 AS NUMERIC(24,8))AS A,CAST(0 AS NUMERIC(24,8))AS B,CAST(500 AS NUMERIC(24) ,8))AS C)T
所以我们失去了两个重要的符号.试图以不同的方式解决这个问题,我将中间乘法结果(即Zero!)转换为数字(24,8),这样可以正常工作.
最后一个有解决方案.但是我还有一个问题 - 为什么MSSQL以这种方式运行以及我的样本中实际发生了哪种类型的转换?
sql-server floating-point casting type-conversion floating-accuracy
可能不太实用,但仍然很有趣.
有一些关于矩阵乘法的抽象问题我已经快速实现了一个int的矩阵,然后测试了我的假设.
在这里我注意到只是int矩阵不好,如果我偶尔想用十进制或双精度.当然,我可以尝试将所有人都加倍,但这不方便.
继续假设我们可以有一堆对象,我们可以添加和繁殖 - 为什么不在我的矩阵中使用它们?
所以,在考虑它将是一个Matrix类之后,我现在面临无法使用泛型T,我需要它来支持一些可以添加和相乘的接口.
问题是我可以覆盖我的类中的运算符,但我不能引入一个支持运算符的接口.我有一个内置类型的运算符,但仍然没有接口.
考虑到你不想复制工人阶级的身体,你会在这种情况下做什么?包装和隐式铸造对我没什么帮助,我对一个漂亮的解决方案很感兴趣.
谢谢.