本篇文章给大家谈谈Kahan'sSummationFormula原理—它是如何避免大数吃小数的,以及怎么避免大数吃小数的知识点,同时本文还将给你拓展@JoinColumnOrFormula(formu
本篇文章给大家谈谈Kahan's Summation Formula原理—它是如何避免大数吃小数的,以及怎么避免大数吃小数的知识点,同时本文还将给你拓展@JoinColumnOrFormula(formula=@JoinFormula org.hibernate.mapping.Formula cannot be cast to org.hibernate.mapping.Column、Acumatica PXFormula读取多个表的问题、AN4085, Tips for troubleshooting the MMA865x/MMA845x/MMA8491 Sensor Toolbox Communication Issues ...、Android ScaleAnimation和TranslateAnimation,如何避免ScaleAnimation运动等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- Kahan's Summation Formula原理—它是如何避免大数吃小数的(怎么避免大数吃小数)
- @JoinColumnOrFormula(formula=@JoinFormula org.hibernate.mapping.Formula cannot be cast to org.hibernate.mapping.Column
- Acumatica PXFormula读取多个表的问题
- AN4085, Tips for troubleshooting the MMA865x/MMA845x/MMA8491 Sensor Toolbox Communication Issues ...
- Android ScaleAnimation和TranslateAnimation,如何避免ScaleAnimation运动
Kahan's Summation Formula原理—它是如何避免大数吃小数的(怎么避免大数吃小数)
Kahan求和公式原理:
首先,这个算法就是用来求和的,求a1+a2+a3+...为什么不直接相加呢,而要用Kahan求和公式呢,这个算法的用武之地在哪呢,一一道来
kahan求和算法能避免大数吃小数的情况。
大数吃小数是什么意思呢?举个例子,我们用两个float相加,float是32位,它的精度是小数点后6-7位(详见http://www.voidcn.com/article/p-srkjdhyr-bbv.html),设有a=123456;b=2.189;a+b应该是123458.189但是由于float的精度只有小数点后6-7位,所以必然得不到123458.189,后面的89可能会截掉,8不一定,9是必然会截掉的。好的,才做一个加法就产生至少了0.009的误差,做1000个这样的加法,误差就是9了,这显然不是我们想要的。
kahan求和算法可以避免这种情况,它有一个数用来记住那个被截断的小数,同样做下面的计算,设有a=123456;b=2.189;计算a+b。kahan求和算法是这样做的:sum=a+b(不准确); temp= (a+b)-a-b;temp等于多少呢,初看这不就是0吗?不是的,计算机此时算的可不是0,而是等于-0.009,就是被截断的那个小数。通过一个临时变量我们就记住了这个误差,当计算下一个加法的时候,可以把这个误差补上,并且更新误差到sum。
其实也可以这样理解,sum不是由于数太大,占用了小数的精度吗,而这个小数在当前一步看似是可以忽略的,但是由于,迭代的次数旁道,小数会累积成大误差,那么我们另外用的float专门记住这个误差小数不就得了吗。
详细的可以看维基百科,不过是英文的
http://en.wikipedia.org/wiki/Kahan_summation_algorithm
Kahan summation algorithm 的具体算法如下:
function KahanSum(input) var sum = 0.0 var c = 0.0 //A running compensation for lost low-order bits. for i = 1 to input.length do y = input[i] - c //So far,so good: c is zero. t = sum + y //Alas,sum is big,y small,so low-order digits of y are lost. c = (t - sum) - y //(t - sum) recovers the high-order part of y; subtracting y recovers -(low part of y) sum = t //Algebraically,c should always be zero. Beware eagerly optimising compilers! //Next time around,the lost low part will be added to y in a fresh attempt. return sum
@JoinColumnOrFormula(formula=@JoinFormula org.hibernate.mapping.Formula cannot be cast to org.hibernate.mapping.Column
@JoinColumnOrFormula (formula=@JoinFormula 在 hibernate4.3.11 中报错:
Caused by: java.lang.ClassCastException: org.hibernate.mapping.Formula cannot be cast to org.hibernate.mapping.Column
at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:433)
at org.hibernate.cfg.annotations.CollectionBinder.bindCollectionSecondPass(CollectionBinder.java:1467)
at org.hibernate.cfg.annotations.CollectionBinder.bindOneToManySecondPass(CollectionBinder.java:865)
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:780)
at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:729)
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:70)
at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1697)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1426)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1930)
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:454)
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:439)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1631)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1568)
... 75 more
M_CIF_INTERNATIONAL_CHECK
package com.hnair.opcnet.ods.ml.model;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.Where;
import com.hnair.opcnet.common.util.DateUtils;
@Entity
@Table(name="M_CIF_INTERNATIONAL_CHECK")
public class M_CIF_INTERNATIONAL_CHECK implements java.io.Serializable {
private static final long serialVersionUID = -1;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Column(name = "SRC_ID")
private String srcId;
@OneToMany(fetch = FetchType.EAGER, mappedBy="check")
// @Where(clause="DELETED = 0")
private Set<M_CIF_INTERNATIONAL_CHECK_FILE> checkFile = new HashSet<M_CIF_INTERNATIONAL_CHECK_FILE>();
public void setId(Long id){
this.id=id;
}
public Long getId(){
return id;
}
public Set<M_CIF_INTERNATIONAL_CHECK_FILE> getCheckFile() {
return checkFile;
}
public void setCheckFile(Set<M_CIF_INTERNATIONAL_CHECK_FILE> checkFile) {
this.checkFile = checkFile;
}
}
M_CIF_INTERNATIONAL_CHECK_FILE
package com.hnair.opcnet.ods.ml.model;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.JoinColumnOrFormula;
import org.hibernate.annotations.JoinColumnsOrFormulas;
import org.hibernate.annotations.JoinFormula;
import com.hnair.opcnet.common.util.DateUtils;
@Entity
@Table(name="M_CIF_INTERNATIONAL_CHECK_FILE")
public class M_CIF_INTERNATIONAL_CHECK_FILE implements java.io.Serializable {
private static final long serialVersionUID = -1;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Column(name = "SRC_ID")
private String srcId;
@ManyToOne(cascade = CascadeType.REFRESH, targetEntity = M_CIF_INTERNATIONAL_CHECK.class)
@JoinColumnsOrFormulas(value={
@JoinColumnOrFormula(column=@JoinColumn(name = "CHECKID", referencedColumnName = "SRC_ID", nullable = true, insertable = false, updatable = false))
,@JoinColumnOrFormula(formula=@JoinFormula(value="0", referencedColumnName = "DELETED"))
})
private M_CIF_INTERNATIONAL_CHECK check;
/** 删除标志 */
@Column(name = "DELETED")
private Integer deleted;
public void setId(Long id){
this.id=id;
}
public Long getId(){
return id;
}
/** 设置 删除标志 */
public void setDeleted(Integer deleted){
this.deleted=deleted;
}
/** 获取 删除标志 */
public Integer getDeleted(){
return deleted;
}
public M_CIF_INTERNATIONAL_CHECK getCheck() {
return check;
}
public void setCheck(M_CIF_INTERNATIONAL_CHECK check) {
this.check = check;
}
}
主表 M_CIF_INTERNATIONAL_CHECK 中使用 @Where (clause="DELETED = 0")
子表 M_CIF_INTERNATIONAL_CHECK_FILE 取消,@JoinColumnOrFormula (formula=@JoinFormula (value="0", referencedColumnName = "DELETED"))
是正常的
Acumatica PXFormula读取多个表的问题
如何解决Acumatica PXFormula读取多个表的问题?
我正在使用套件行规格上的非持久字段。公式实际上只是数量乘以成本。问题是,std成本保存在InventoryItems表上,但平均或最后成本等却没有。该公式很容易得出标准成本,但事实也很难读取平均成本。我已经尝试了INItemStatsTotal和INItemCost来获取成本和其他工作,还尝试了额外的选择器来做到这一点,尽管标准成本很好,但其他成本却是空白。由于我也将其总计到标题中,因此应该将值的总和推送到标题中,这是在您更改标准成本项目时执行的操作,而不是其他项。下面是一个示例,其中包含多种获取数据的方法-dtd成本是唯一可行的方法。感谢您的帮助。
[PXFormula(
//typeof(Mult<Selector<INKitSpecstkDet.compInventoryID,InventoryItem.stdcost>,INKitSpecstkDet.dfltCompQty>),typeof(Mult<Selector<INKitSpecstkDet.compInventoryID,Switch<
Case<
Where<InventoryItem.valMethod,Equal<INValMethod.standard>>,InventoryItem.stdcost,Case<Where<InventoryItem.valMethod,Equal<INValMethod.average>>,INItemStatsTotal.avgCost
//,Selector<INKitSpecstkDet.compInventoryID,INItemCost.avgCost>,Equal<INValMethod.specific>>
//,INItemCost.lastCost,INItemStatsTotal.lastCost>,Equal<INValMethod.fIFO>>
//,INItemStatsTotal.lastCost>
>>>>>>,typeof(SumCalc<INKitSpecHdrExt.usrnpTotalStockCost>))]
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
AN4085, Tips for troubleshooting the MMA865x/MMA845x/MMA8491 Sensor Toolbox Communication Issues ...


Troubleshooting, MMA865x, MMA845x, MMA8491, STB, STB hardware, STB software, STB, Communication Issues, Motion/Freefall status indicator, user interface

Android ScaleAnimation和TranslateAnimation,如何避免ScaleAnimation运动
TranslateAnimation:
TranslateAnimation goTopFromright = new TranslateAnimation(0,-(right.getLeft()-top.getLeft()),-(right.getTop()-top.getTop()));
ScaleAnimation:
ScaleAnimation = setSizeforTop = new ScaleAnimation(1,2,1,2);
和AnimationSet:
bringToLeftFromTopAnimationSet = new AnimationSet(true); bringToTopFromrightAnimationSet.addAnimation(goTopFromright); bringToTopFromrightAnimationSet.addAnimation(setSizeforTop);
问题是,当我尝试仅使用ScaleAnimation时,我的项目会转到我想要的位置,但是当我在AnimationSet中使用ScaleAnimation和TranslateAnimation时,我的项目翻译的次数超出了我的需要,就像ScaleAnimation引入了一些补充一样动作abd我不知道如何删除它们.
谢谢您的帮助.
解决方法
bringToTopFromrightAnimationSet.addAnimation(setSizeforTop); bringToTopFromrightAnimationSet.addAnimation(goTopFromright);
我们今天的关于Kahan's Summation Formula原理—它是如何避免大数吃小数的和怎么避免大数吃小数的分享就到这里,谢谢您的阅读,如果想了解更多关于@JoinColumnOrFormula(formula=@JoinFormula org.hibernate.mapping.Formula cannot be cast to org.hibernate.mapping.Column、Acumatica PXFormula读取多个表的问题、AN4085, Tips for troubleshooting the MMA865x/MMA845x/MMA8491 Sensor Toolbox Communication Issues ...、Android ScaleAnimation和TranslateAnimation,如何避免ScaleAnimation运动的相关信息,可以在本站进行搜索。
本文标签: