【发布时间】:2017-12-08 11:20:55
【问题描述】:
我正在试验一些三角函数,代码编译得很好,我想看到一个正方形在 360 度上移动,但是当我运行代码时,我看到正方形只在 x 轴上移动,一切正常,除了一个在我的功能上划线。
void mvdr(int* x, int* y, float d, float sp)
{
if(d != 0)
d = (d / 360.0) / 6.283185307179586;
*x += cos(d)*sp;
*y += sin(d)*sp; // here's the error
}
我在 gdb 中看到:y 没有变化。
(gdb) n
11 *y += sin(d)*sp; // here's the error
(gdb) p d
$4 = 0.000442097051
(gdb) p sin(d)*sp
$5 = 6.44245094e+09
(gdb) p *y
$6 = 256
(gdb) n
12 }
(gdb) p *y
$7 = 256
我不明白发生了什么,或者我做错了什么,希望你能帮助我。
【问题讨论】:
-
"我在 gdb 中看到:y 没有改变。"您没有更改
y而是更改*y所指向的内容。 -
@WeatherVane 这正是他在 GDB 中看到的内容
-
不是问的。
y不变。 -
*y是一个int值。也许float更改太小而无法注册。显示一些示例值。为什么在 22 世纪你还在使用float? -
巧合? "6.44245094e+09" 是打印
0x180000000的有效方式。但这仍然会改变 32 位int。
标签: c