w******t 发帖数: 241 | 1 想取一个0-1之间随机数(0.1为单位)。
(rand()%10)/10之后老是不对,无论在哪里加上float的强制转换符都不行。每次
都会出现1.000001或者3.99999999之类的数值,而不是我想要的0.1或者0.4。不知道有
没有什么解决方法。谢谢 |
b******u 发帖数: 469 | 2 float zz = ((float)(rand()%10))/10;
C++这个可以
【在 w******t 的大作中提到】 : 想取一个0-1之间随机数(0.1为单位)。 : (rand()%10)/10之后老是不对,无论在哪里加上float的强制转换符都不行。每次 : 都会出现1.000001或者3.99999999之类的数值,而不是我想要的0.1或者0.4。不知道有 : 没有什么解决方法。谢谢
|
w******t 发帖数: 241 | 3 试过了,还是不行,需要加什么库文件吗?还是有6.9999999这样的出来。我是直接在
VS里面调试的。不会是编译器有什么问题吧
【在 b******u 的大作中提到】 : float zz = ((float)(rand()%10))/10; : C++这个可以
|
b******u 发帖数: 469 | 4 奇怪,我vs6做的,输出都是0.x。不知道为啥
#include
#include
void main()
{
for (int nn=0;nn<500;nn++)
{
float zz = ((float)(rand()%10))/10;
cout<
}
}
【在 w******t 的大作中提到】 : 试过了,还是不行,需要加什么库文件吗?还是有6.9999999这样的出来。我是直接在 : VS里面调试的。不会是编译器有什么问题吧
|
w******t 发帖数: 241 | 5 能帮我看看单步调试但是不输出的中间值吗(能不能设个断点看看,因为我这里设断点
看ZZ的值有时候还是会出现.000001或者.99999999)?好像输出的时候自动进行了处理
?谢谢
【在 b******u 的大作中提到】 : 奇怪,我vs6做的,输出都是0.x。不知道为啥 : #include : #include : void main() : { : for (int nn=0;nn<500;nn++) : { : float zz = ((float)(rand()%10))/10; : cout<: }
|
b******u 发帖数: 469 | 6 好像没有发现啥异常情况。。
【在 w******t 的大作中提到】 : 能帮我看看单步调试但是不输出的中间值吗(能不能设个断点看看,因为我这里设断点 : 看ZZ的值有时候还是会出现.000001或者.99999999)?好像输出的时候自动进行了处理 : ?谢谢
|
w******t 发帖数: 241 | 7 我发现了问题在哪里,在输出的时候,float只输出了小数点后面6位,但是单步调试的
时候数值时小数点后面7位。我用的是printf("%f\n",zz);来做的。这个问题有什么办
法解决吗
【在 b******u 的大作中提到】 : 奇怪,我vs6做的,输出都是0.x。不知道为啥 : #include : #include : void main() : { : for (int nn=0;nn<500;nn++) : { : float zz = ((float)(rand()%10))/10; : cout<: }
|
b******u 发帖数: 469 | 8 你还有上面说的6.9999么,还是现在只是10^-7之类的精度问题
【在 w******t 的大作中提到】 : 我发现了问题在哪里,在输出的时候,float只输出了小数点后面6位,但是单步调试的 : 时候数值时小数点后面7位。我用的是printf("%f\n",zz);来做的。这个问题有什么办 : 法解决吗
|
b******u 发帖数: 469 | 9 用比如%f3.7试试?
【在 w******t 的大作中提到】 : 我发现了问题在哪里,在输出的时候,float只输出了小数点后面6位,但是单步调试的 : 时候数值时小数点后面7位。我用的是printf("%f\n",zz);来做的。这个问题有什么办 : 法解决吗
|
w******t 发帖数: 241 | 10 不知道怎么回事我这边有这样情况,我是用C的printf("%f\n",zz),输出没问题。但是
单步调试的时候看zz的值还是有我说的异常现象,难不成是VC++express的问题?
【在 b******u 的大作中提到】 : 好像没有发现啥异常情况。。
|
w******t 发帖数: 241 | 11 还是会出现.0000001或者.9999999
【在 b******u 的大作中提到】 : 你还有上面说的6.9999么,还是现在只是10^-7之类的精度问题
|
w******t 发帖数: 241 | 12 谢谢,我发现了输出正确的。小数点后面7位,但是调试的时候会显示到小数点后面8位(这样就会有.00000001或者.99999999,刚才少打了一位),输出的时候float自动取到7位。估计是在计算或者VC内部运行的时候先转换成double在处理了。
【在 b******u 的大作中提到】 : 用比如%f3.7试试?
|
j******n 发帖数: 271 | 13 Note that 0.1 cannot be exactly represented as an IEEE 754 FP number.
【在 w******t 的大作中提到】 : 谢谢,我发现了输出正确的。小数点后面7位,但是调试的时候会显示到小数点后面8位(这样就会有.00000001或者.99999999,刚才少打了一位),输出的时候float自动取到7位。估计是在计算或者VC内部运行的时候先转换成double在处理了。
|
w***n 发帖数: 1084 | 14 nod. 就算printf出来是0.1000000了,其实也不是。
【在 j******n 的大作中提到】 : Note that 0.1 cannot be exactly represented as an IEEE 754 FP number.
|