变量类型“双”的问题

时间:2011-03-03 23:37:33

标签: c++

我编写了一个程序,它可以处理3D坐标(即x,y,z)。

我的程序的输入数据就像

50903.85 21274.97 15.03 
50903.57 21274.96 15.08 
50903.33 21274.95 15.17 

我得到了更多列的输出。所以,我的输出文件得到了相同的x,y,z。

50903.85 21274.97 15.03 
50903.57 21274.96 15.08 
50903.33 21274.95 15.17

所以,我猜我的程序运行正常。

然后,我使用了另一个数据集,其数字比以前的数据多,

512330.98 5403752.71 330.39 
512331.01 5403754.18 329.44 
512331.06 5403755.59 329.56 

我的输出就像;

512331 5.40375e+006 330.39 
512331 5.40375e+006 329.44 
512331 5.40376e+006 329.56 

在这里,我无法获得真正的价值观。和x值也是四舍五入的。我想不出应该是什么原因?

在我的程序中,我使用“double”为x,y,z值分配变量。那么,我想知道什么是可以被称为加倍的最大数值?

如果有人需要处理很长的值,那么相关变量应该是什么?

4 个答案:

答案 0 :(得分:1)

这些数字,例如5.40375e + 006,是表示双打的另一种方式。当它们变得足够大时,它们默认以科学记数法打印。 5.40375e + 006是5.40375 * 10 ^ 6,或5403750。

答案 1 :(得分:1)

数字没有变化,你只是看到了不同的符号变化。也许你使用的不是%f来格式化你的双打?请参阅printf format parameters

更好的是,请查看此StackOverflow问题:How to avoid scientific notation for large numbers?

答案 2 :(得分:0)

答案 3 :(得分:0)

双打有大约16位小数的精度(source),所以你不应该有任何问题,除非你打印浮点数。