读书人

高分:一个怪异的浮点数有关问题

发布时间: 2012-09-25 09:55:59 作者: rapoo

高分:一个怪异的浮点数问题
1.
double flag = 100;
double tmp = flag / 30;

结果:flag 的值变为 -1.#IND000000000000

2.

float flag = 100;
double tmp = flag / 30;//或者 float tmp = flag/30

结果:tmp 为 -1.#IND000000000000

3.
int tmp = (int)floor(20.1);//<math.h>

结果:tmp 为 0.00000000000000000


如果将上面的代码放到另外一个函数里面就没任何问题(其他工程里面也没问题)。

换成int类型没问题:
int flag = 100;
int tmp = flag / 30;//没有问题

注:整个函数就只有上面的代码。

请问:
1. 这些问题可能的原因是什么 ?精度(应该不是吧,因为其他函数里面是可以的)?堆栈(不懂...)?
2. 为什么int可以,double不可以 ?
3. 如何解决这个问题 ?

[解决办法]
你最好把这个函数贴上来,这样看不出什么问题
[解决办法]
我这里正常呀,没搞明白你啥问题?
[解决办法]
这个不属于正常现象,没有上下文的确不好解释……
[解决办法]
我怀疑是函数调用的问题,需要你的调用环境
[解决办法]
你可以把你的代码片断贴上来,帮你看看,没有代码没办法看
[解决办法]
貌似我以前也遇到过,后来我把工程清空从新编译就没问题了,只是还是不知道是咋啦,灵异事件吧。
[解决办法]
没链接浮点数库?
[解决办法]

探讨
没链接浮点数库?

[解决办法]
你不会调试的release版本把?
[解决办法]
看来是你假设的问题。看看是不是你的程序中哪一部分修改了你的结果,比如越界等。
[解决办法]
大家来看神迹!受教了
[解决办法]
理念上是讨论不过去的,可从全局来看就应该是这样的,一定是那设置的不对造成的
[解决办法]
同上,如果浮点数计算的代码本身没问题,那么就是其他代码的问题,如:内存越界,野指针,堆栈溢出等

要相信逻辑,那种灵异事件就算有也是非常小概率,哪有这么容易碰上?!
[解决办法]
没有问题,如果有问题,那我们的代码很多都有问题了

什么编译器呀
[解决办法]
没有看出楼主的主帖与在8楼贴的代码之间的关系
[解决办法]
楼主还有没有准确完整地描述问题,光是几行代码看不出问题,问题可能出自你的使用环境中,应将使用环境也描述一下
[解决办法]
添个人气
[解决办法]

1:精度的问题吧
2:类型的转换问题
[解决办法]
不知道什么原因出现的,解决这个问题,你可以试试将用来相除的两个浮点数同时放大N倍,使两数均为整数,再相除,再得结果。
[解决办法]
up

读书人网 >C++

热点推荐