让我们考虑以下示例。 double x = 1234597000.0
当我在数据库中保存x的值时,它存储为1234600000。 当我在程序中进行减法运算时,它被视为1234600000。 你能帮我理解那里发生了什么吗?
我的系统是solaris并使用Sun Studio C ++(CC)编译器编译程序。
提前致谢。
答案 0 :(得分:6)
您正在遇到IEEE浮点编码的陷阱。这个问题出现了很多。请参阅What Every Computer Scientist Should Know About Floating-Point Arithmetic
答案 1 :(得分:2)
看起来你的double正在沿着线的某个地方转换为浮点数(读取:丢失精度)。浮动只有大约6-7个有效数字IIRC,而不是十几个双打。