用指数记数法赋值和计算
Posted
技术标签:
【中文标题】用指数记数法赋值和计算【英文标题】:Assign and calculate by exponential notation 【发布时间】:2011-11-10 16:16:54 【问题描述】:你有没有观察到这种现象:
如果我尝试在 Visual Studio 2010 C# .Net 的 ImmediateWindow 中计算以下计算,我会得到这个奇怪的解决方案。
1E-9 * 100 = 0.00000010000000000000001
1E-9 * 1E+2 = 0.00000010000000000000001
即使我这样计算:
double val = 1E-9;
0.000000001
val = val * 100;
0.00000010000000000000001
如果我在 Windows calc 中计算相同的计算,我会得到预期的结果:
1E-9 * 100 = 0,0000001
如果有人对这种行为有所了解,我会很高兴获得信息。
【问题讨论】:
也许 windows 计算器不使用双精度数?为什么你认为它们应该具有相同的精度? 您是否对0.00000010000000000000001
的行为感兴趣,这是尝试在二进制计算机中存储十进制数字的结果(之前已经回答过很多次),或者Windows Calc 得到它的事实别人弄错的时候对吗?
【参考方案1】:
您是否使用指数表示法并不重要,您只是遇到了浮点精度。如果您想要更好的准确性,请使用小数,例如:
decimal val = 1E-9;
0.000000001
val = val * 100;
0.0000001
见What Every Computer Scientist Should Know About Floating-Point Arithmetic
【讨论】:
以上是关于用指数记数法赋值和计算的主要内容,如果未能解决你的问题,请参考以下文章