相关疑难解决方法(0)

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

比较两个double或两个float值的最有效方法是什么?

简单地这样做是不正确的:

bool CompareDoubles1 (double A, double B)
{
   return A == B;
}
Run Code Online (Sandbox Code Playgroud)

但是像这样:

bool CompareDoubles2 (double A, double B) 
{
   diff = A - B;
   return (diff < EPSILON) && (-diff < EPSILON);
}
Run Code Online (Sandbox Code Playgroud)

似乎浪费处理.

有谁知道更聪明的浮动比较器?

c++ algorithm floating-point optimization

495
推荐指数
13
解决办法
39万
查看次数

浮点不准确的例子

你如何向仍然认为计算机是无限智能和准确的新鲜程序员和外行人解释浮点不准确?
你有一个最喜欢的例子或轶事似乎比一个精确但干燥的解释更好地理解这个想法吗?
这是如何在计算机科学课程中教授的?

floating-point floating-accuracy

29
推荐指数
3
解决办法
10万
查看次数

大于C中浮点数的比较

请考虑以下代码:

float x = 0.1;
if ( x> 0.1){
    printf("if");
}
Run Code Online (Sandbox Code Playgroud)

现在,当我检查相等性时,可以解释x通过在末尾填充0来转换为double,但是RHS上的0.1存储为double,因此不等式.但是,如果我通过这个逻辑,上面代码中的"if"应该给出错误,但事实确实如此.为什么?

c

3
推荐指数
1
解决办法
83
查看次数

C浮点精度

可能重复:
浮点比较

我对C/C++中float的准确性有疑问.当我执行以下程序时:

#include <stdio.h>

int main (void) {
    float a = 101.1;
    double b = 101.1;
    printf ("a: %f\n", a);
    printf ("b: %lf\n", b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果:

a: 101.099998
b: 101.100000
Run Code Online (Sandbox Code Playgroud)

我相信浮点数应该是32位,所以应该足以存储101.1为什么?

c c++ floating-point floating-point-conversion

2
推荐指数
1
解决办法
492
查看次数

如果c ++中的语句加倍

#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <stdlib.h>

using namespace std;

int main()
{
    int x,y,z;
cout<<"welcome to guessing game\nplayer one pick your number: ";
cin>>x;
if (x < 0)(x > 100);
{
    cout<<"out of number range";
}
Sleep(2000);
system("cls");
cout<<"ok player 2 pick the guess";
cin>>y;
if (x == y){
      cout<<"congrats you got it right";
           }
            else{
            if (x < y){
            cout<<"Go lower";}
            else {
            if (x > y){
            cout<<"higher";}}
            }
system("pause>nul");
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我无法看到获取初始if语句无论我输入什么号码都会自动显示超出数字范围.我也允许像if(x <0)(x> 100)那样放置像soo这样的条件.我怎么做它洙它回到程序的开始?

c++

2
推荐指数
1
解决办法
155
查看次数

在上面的"浮动i = 0.7"初始化之后,"i <0.7"是真的吗?

可能重复:
浮点比较

#include<stdio.h>
#include<conio.h>
int main()
{
float i=0.7;
clrscr();
if(i < 0.7)
     printf("If Block");
else
     printf("Else Block");
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不明白whay输出将是"If block".....请帮助为什么if部分被执行?

c c++

1
推荐指数
1
解决办法
1817
查看次数

它是C程序的正确输出

可能重复:
浮点比较

我有简单的c代码,输出对我来说意外

main()

{

  float f1 = 1.0;

  double f2 = 1.0;

  if(f1==f2)

 printf("Equal");

 else

  printf("unequal");

  }
Run Code Online (Sandbox Code Playgroud)

我期待输出"不相等",但输出是相等的.为什么?

由于float和double具有不同的精度,因此输出应该是不相等的.

c

0
推荐指数
1
解决办法
119
查看次数

在 R 中比较时,相同的数字显示为 false

可能重复:
在 R 中,这两者有什么区别?
R中的浮点问题?

这是我创建的代码的一部分。我花了几天时间寻找问题,最终意识到应该为 TRUE 的比较被 R 计算为 FALSE。我在 Windows 上使用 R 2.14.2 64 位。这是重现问题的代码。

concList= c(1.15, 1.15, 1.15 ,1.15 ,1.15 ,1.15 )
concList=concList-0.4
a=sum(concList)
b=length(concList)*0.75
str(a)
str(b)
print(a==b)
Run Code Online (Sandbox Code Playgroud)

即使它们显示为完全相同的数字,最后一次打印也会导致 FALSE。我认为这可能是 R 的浮点数值表示上的一些问题,所以我添加了下面的代码来解决这个问题。

a=round(a,1)
b=round(b,1)
print(a==b)
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有更优雅的解决方案?这是一个应该报告的错误吗?

谢谢你的时间。

r rounding

0
推荐指数
1
解决办法
2645
查看次数

浮动值条件

我制定了以下代码,得到了一个奇怪的输出.谁能解释它是如何工作的?

main()
{
    float a=0.8;
    float b=0.25;
    if(a==0.8)
        printf("HELLO")
    if(b==0.25)
        printf("WORLD")
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出令人惊讶

WORLD
Run Code Online (Sandbox Code Playgroud)

提前致谢

c floating-point floating-point-conversion

0
推荐指数
1
解决办法
1010
查看次数

为什么浮动乘以0.699999而不是0.7

这里x取0.699999而不是0.7,但y取0.5分配.你能告诉我这种行为的确切原因是什么吗?

#include<iostream>
using namespace std;

int main()
{
float x = 0.7;
float y = 0.5;
if (x < 0.7)
{
if (y < 0.5)
   cout<<"2 is right"<<endl;
else 
   cout<<"1 is right"<<endl;
}
else 
   cout<<"0 is right"<<endl; 

cin.get();
return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ floating-point dev-c++ visual-c++

0
推荐指数
1
解决办法
568
查看次数

在C中测试浮点相等性

我有以下代码,给出了奇怪的输出

#include<stdio.h>
void main()
{
 float a, x;
 a=6.7;
 if(a==6.7)
  printf("1\n");
 else
  printf("2\n");


 x=8.5;
 if(x==8.5)
  printf("1\n");
 else
  printf("2\n");

}
Run Code Online (Sandbox Code Playgroud)

产量

$ ./a.out 
2
1
Run Code Online (Sandbox Code Playgroud)

如果我用f后缀数字例如"6.7f"如果条件然后我得到正确的输出,我不明白为什么这种奇怪的行为?

c

-2
推荐指数
1
解决办法
1095
查看次数

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
查看次数