尝试创建Mandelbrot集,我一直在尝试在程序中使用8位和15位浮点变量,并遇到了一个问题:double
近似于0
。我尝试了单元测试并编写了这段代码来隔离问题。使用变量查看器,h
和w
值都在0.0
上,而不是0.00185185185185
和0.0015625
,但是当我写{{1}时它有效。
非常感谢您的帮助。
double h = 0.0015625
答案 0 :(得分:3)
您正在划分两个int
个变量,结果为int
。您将结果存储在double
中,但是比例(小数点后的部分)已经丢失。
始终使用double
:
double apparentwidth = 3;
double apparentheight = 2;
double height = 1080;
double width = 1920;
double w = (apparentwidth / width);
double h = (apparentheight / height);
或者在划分时将其中一个变量投射到double
:
double w = ((double)apparentwidth / width);
double h = ((double)apparentheight / height);
答案 1 :(得分:1)
你是在意外进行整数分割。
double w = (double)apparentwidth / (double)width;
double h = (double)apparentheight / (double)height;
答案 2 :(得分:1)
只是为了对其他答案提供进一步的解释:
当您对int
进行数学运算时,结果为int
,这是通过有效截断非整数部分来实现的:
3 / 2 == 1
当执行涉及至少一个double
的操作时,int
输入首先转换为double
,因此结果为double
:
1.0 / 4 == 0.25
4 * 0.25 == 1
当然,如果两个输入均为double
,则结果为double
且不会发生隐式转换:
1.0 / 4.0 == 0.25