IQmath中有这样一段定义 #define _IQ16(A) (long) ((A) * 65536.0L) 假设以2^16为例
个人理解,C2000系列处理器不支持浮点运算,需要将小数部分进行转化,所以有了IQ定标,我没有明白的是,一个小数为何要乘以2^16,而不是像10000这样的数字?
假设A=0.03,A*65536=1966.08,再强制转换成long型,就成了1966,丢失了小数部分,相当于精度变差
但是如果A*10000=300,就没有了丢失数据的成分
IQ定标为何要乘以2的几次幂而不是乘以10000或者类似于1后面好多零这样的数据呢?难道是乘以2的几次幂花费的时间比乘以10000所用的时间少?求指导
mangui zhang:
定标主要以数的小数点后面位数为主 看具体位数是多少 然后定标Q**
IQmath中有这样一段定义 #define _IQ16(A) (long) ((A) * 65536.0L) 假设以2^16为例
个人理解,C2000系列处理器不支持浮点运算,需要将小数部分进行转化,所以有了IQ定标,我没有明白的是,一个小数为何要乘以2^16,而不是像10000这样的数字?
假设A=0.03,A*65536=1966.08,再强制转换成long型,就成了1966,丢失了小数部分,相当于精度变差
但是如果A*10000=300,就没有了丢失数据的成分
IQ定标为何要乘以2的几次幂而不是乘以10000或者类似于1后面好多零这样的数据呢?难道是乘以2的几次幂花费的时间比乘以10000所用的时间少?求指导
Tao Li5:
回复 mangui zhang:
为何不乘以1000这样的数字来定标呢?
IQmath中有这样一段定义 #define _IQ16(A) (long) ((A) * 65536.0L) 假设以2^16为例
个人理解,C2000系列处理器不支持浮点运算,需要将小数部分进行转化,所以有了IQ定标,我没有明白的是,一个小数为何要乘以2^16,而不是像10000这样的数字?
假设A=0.03,A*65536=1966.08,再强制转换成long型,就成了1966,丢失了小数部分,相当于精度变差
但是如果A*10000=300,就没有了丢失数据的成分
IQ定标为何要乘以2的几次幂而不是乘以10000或者类似于1后面好多零这样的数据呢?难道是乘以2的几次幂花费的时间比乘以10000所用的时间少?求指导
Tao Li5:
回复 mangui zhang:
没有明白啊
IQmath中有这样一段定义 #define _IQ16(A) (long) ((A) * 65536.0L) 假设以2^16为例
个人理解,C2000系列处理器不支持浮点运算,需要将小数部分进行转化,所以有了IQ定标,我没有明白的是,一个小数为何要乘以2^16,而不是像10000这样的数字?
假设A=0.03,A*65536=1966.08,再强制转换成long型,就成了1966,丢失了小数部分,相当于精度变差
但是如果A*10000=300,就没有了丢失数据的成分
IQ定标为何要乘以2的几次幂而不是乘以10000或者类似于1后面好多零这样的数据呢?难道是乘以2的几次幂花费的时间比乘以10000所用的时间少?求指导
Linda:
回复 Tao Li5:
您好!
建议到以下网址下载C2000多天培训资料,其中有关于IQmath与浮点定标对比的详细介绍:
http://processors.wiki.ti.com/index.php/C2000_Multi-Day_Workshop
IQmath中有这样一段定义 #define _IQ16(A) (long) ((A) * 65536.0L) 假设以2^16为例
个人理解,C2000系列处理器不支持浮点运算,需要将小数部分进行转化,所以有了IQ定标,我没有明白的是,一个小数为何要乘以2^16,而不是像10000这样的数字?
假设A=0.03,A*65536=1966.08,再强制转换成long型,就成了1966,丢失了小数部分,相当于精度变差
但是如果A*10000=300,就没有了丢失数据的成分
IQ定标为何要乘以2的几次幂而不是乘以10000或者类似于1后面好多零这样的数据呢?难道是乘以2的几次幂花费的时间比乘以10000所用的时间少?求指导
Tao Li5:
回复 Linda:
打不开,显示错误