比较两个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)
似乎浪费处理.
有谁知道更聪明的浮动比较器?
你如何向仍然认为计算机是无限智能和准确的新鲜程序员和外行人解释浮点不准确?
你有一个最喜欢的例子或轶事似乎比一个精确但干燥的解释更好地理解这个想法吗?
这是如何在计算机科学课程中教授的?
请考虑以下代码:
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/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为什么?
#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这样的条件.我怎么做它洙它回到程序的开始?
可能重复:
浮点比较
#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代码,输出对我来说意外
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具有不同的精度,因此输出应该是不相等的.
可能重复:
在 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)
我的问题是,有没有更优雅的解决方案?这是一个应该报告的错误吗?
谢谢你的时间。
我制定了以下代码,得到了一个奇怪的输出.谁能解释它是如何工作的?
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)
提前致谢
这里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) 我有以下代码,给出了奇怪的输出
#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"如果条件然后我得到正确的输出,我不明白为什么这种奇怪的行为?
可能重复:
浮点比较
嗯,这是一个奇怪的.通常以下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)