标签: floating-point

3D'射手'跳跃算法--C++低级别漏洞.当它们应该时,两个相同的双打彼此不相等.4.0!= 4.0显然

可能重复:
浮点比较

嗯,这是一个奇怪的.通常以下if( 4.0 == 4.0 ){return true}将永远返回true.在一个简单的小型opengl 3d'射手'程序中,当我试图添加"跳跃"效果时,情况并非如此.

这个想法相当简单,我有一个三角形条带的地形,因为"角色"移动/走动你沿着一个2d阵列的高度移动,因此你在山丘/低谷的各个高度上下走动.

drawScene()函数之外(或者如果你知道opengl,那么glutDisplayFunc()),我有一个update()函数,当他'跳'时,它会上升和下调字符,这就是调用drawScene().用语言来说,我可以解释它的高级别,跳跃算法如下:

参数:

double currentJumpingHeight
double maximumJumpingHeight = 4.0
double ypos;
const double jumpingIncrement = 0.1; //THE PROBLEM!!!! HAS TO BE A MULTIPLE OF 0.5!!
bool isJumping = false;
bool ascending = true;
Run Code Online (Sandbox Code Playgroud)

算法:

(when space is pressed) isJumping = true.

if ascending = true and isJumping = true, 
      currentJumpHeight += jumpingIncrement (and the same for ypos)

if currentJumpingHeight …
Run Code Online (Sandbox Code Playgroud)

c++ opengl floating-point

-4
推荐指数
1
解决办法
1305
查看次数

c ++ && <= float和if

我用的时候:

if( a>=0 && a<100 && b>=0 && b<200 )
Run Code Online (Sandbox Code Playgroud)

一切正常,但如果我使用:

if( 0<=a<100 && 0<=b<200 )
Run Code Online (Sandbox Code Playgroud)

我的程序崩溃了.a和b =浮动.有人可以告诉我有什么区别吗?

c++ floating-point int if-statement

-4
推荐指数
1
解决办法
379
查看次数

-4
推荐指数
2
解决办法
260
查看次数

双重,浮动和长期声明

我想知道为什么在Java中它通过执行以下操作给出了编译错误:

double d34324.34; //error
float f3342.34; //error
Run Code Online (Sandbox Code Playgroud)

另一方面:

long L32423424; // works fine
double D32432424; // works fine
Run Code Online (Sandbox Code Playgroud)

所以基本上我想知道为什么只有浮点值的语法使用这个限制.

我知道如果字母标识符(D,d,F,f)放在它工作的数字的末尾,但我仍然想知道为什么另一种形式不适用于浮点数.只是好奇,我知道如果我键入3443.43434f它的工作原理.

java floating-point

-4
推荐指数
2
解决办法
5万
查看次数

人类智能与Javascript功能

我使用了javascripts eval函数.但我不喜欢结果.如何解决这个问题?

表达:

的eval(1.2 + 24-25)

结果:

0.1999999999999993

我想要0.2结果.

javascript math floating-point

-4
推荐指数
2
解决办法
162
查看次数

C++浮点数是远离的

我刚刚在c ++中遇到过这个问题

std::cout << -5.0000004768371582 + 5 << "\n";
Run Code Online (Sandbox Code Playgroud)

这将打印-4.76837e-007,即使你认为它会打印像0.000000476 ...我知道浮点数并不总是正确的,但我以前从未见过这个.我也看到过这与其他数字有关.

为什么是这样.我怎么能解决它?

c++ floating-point precision

-4
推荐指数
2
解决办法
128
查看次数

双重或浮动比较

我见过这样的帖子:

浮动和双重比较最有效的方法是什么?

比较两个花车

和许多其他相关的帖子.

我在d3js库中看到,它使用以下比较:

  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
Run Code Online (Sandbox Code Playgroud)

可以在C/C++中使用它来进行比较doublefloat吗?

c c++ floating-point

-5
推荐指数
1
解决办法
288
查看次数

对于使用float作为计数器的循环,增加0.01,不会打印预期的浮点值

for (float x = 0.00; x < 1.00; x += 0.01) {
    cout << x << endl;
}
Run Code Online (Sandbox Code Playgroud)

我预计

0.00
0.01
0.02
...
Run Code Online (Sandbox Code Playgroud)

它工作正常,直到 0.83:

...
0.81
0.82
0.83
0.839999
0.849999
0.859999
0.869999
0.879999
0.889999
0.899999
0.909999
0.919999
0.929999
0.939999
0.949999
0.959999
0.969999
0.979999
0.989999
0.999999
Run Code Online (Sandbox Code Playgroud)

那部分怎么了?为什么所有额外的9s?

c++ floating-point

-5
推荐指数
1
解决办法
1万
查看次数

为什么将浮点数除以10的幂不如直接键入数字那么准确?

我跑的时候

printf("%.8f\n", 971090899.9008999);
printf("%.8f\n", 9710908999008999.0 / 10000000.0);
Run Code Online (Sandbox Code Playgroud)

我明白了

971090899.90089989
971090899.90089977
Run Code Online (Sandbox Code Playgroud)

我知道为什么两者都不准确,但我不明白为什么第二个与第一个匹配
我认为基本的算术运算(+ - */)总是尽可能准确...
第一个数字不是第二个数字比第二个更精确的结果吗?

c floating-point division ieee-754

-5
推荐指数
2
解决办法
270
查看次数

为什么浮点数对于物理学家来说比整数和精确小数更适合处理大数和小数?

我一直在读浮点数,看看它们是什么,一个网站说这个.

物理学家需要在同一计算中同时使用光速(约300000000)和牛顿的引力常数(约0.0000000000667).为了满足工程师和芯片设计人员的需要,数字格式必须以非常不同的幅度提供数字的准确性.但是,只需要相对准确性.为了满足物理学家的要求,必须能够进行涉及不同数量的数字的计算.

基本上,具有固定数量的整数和小数位是没有用的 - 并且解决方案是具有浮点的格式.

http://floating-point-gui.de/formats/fp/

我对第二段有两个问题.

  1. 对于我处理货币/价格的网络应用程序,我被建议使用"十进制"作为列类型而不是"浮动",因为我正在处理金钱,因为某些金额可能导致错误的答案.
  2. 如果浮点不能floor((0.1+0.7)*10)正确(由于舍入误差*[源]计算为7,而不是8 ),它如何适用于从非常高到非常低的数字(如上面关于物理学家的引用),考虑到它无法使用0.1 - 8prev示例中的数字来计算正确的答案.

为什么物理学家使用浮点计算,为什么不像其他人一样使用精确小数?我被告知不要用它们来赚钱,所以为什么要把它们用于科学

另外,如果计算floor((0.1+0.7)*10)0.1 + 0.2 (等于0.30000000000000004)是如此困难,但不是整数,为什么计算机不能只计算没有小数点的((01 + 07) * 10)01 + 02,或者然后将其放回到答案中(添加小数点1位数)从南方离开)?我知道一个比我年轻的17岁的孩子正在编写一个编译成javascript的编程语言.为什么程序员不能想到从总和中删除小数点(如果使用小数或负数的算术很难计算),然后将小数点放回到最终答案中?由于他们的主要错误,0.15 + 0.15并且0.1 + 0.2如果他们与==或相互比较,可以返回为假>=.这绝对是疯狂!

*7.9999999999999991118 ....

floating-point computer-science

-5
推荐指数
1
解决办法
206
查看次数