检查双精度值是否相等的最有效方法是什么。
我明白那个
double a = 0.00023d;
double b = 0.00029d;
boolean eq = (a == b);
Run Code Online (Sandbox Code Playgroud)
是缓慢的。
所以我在用
double epsilon = 0.00000001d;
eq = Math.abs(a - b) < epsilon;
Run Code Online (Sandbox Code Playgroud)
问题是,Infinitest抱怨太多的测试时间。没什么大不了的(最高1秒),但这让我感到好奇。
附加信息
a硬编码,因为它是期望值,b由
// fyi: current = int, max = int
public double getStatus()
{
double value = 0.0;
if (current != 0 && max != 0)
value = ((double) current) / max;
return value;
}
Run Code Online (Sandbox Code Playgroud)
更新资料
java.lang.Double就是这样
public boolean equals(Object obj) {
return (obj instanceof …Run Code Online (Sandbox Code Playgroud) 我试着寻找这个问题的答案,但无济于事.我想要做的是将cos(x)的0计在0和用户以弧度提供的数字之间.我是c ++的新手,如果这是微不足道的话,请保持温和.
这是我的代码摘录(也请注意我并不完全确定#import和之间的区别#include,但我离题了).
#define _USE_MATH_DEFINES
#import <iostream>
#import <algorithm>
#include <math.h>
#include <stdio.h>
int count = 0;
if (r > 0) {
for (float i = 0; i < r; i += M_PI_2) {
printf("\n\n%s: %f: %f\n\n", cos(i) == -float(0) ? "true":"false", \
cos(i), -float(0));
if (cos(i) == float(0) || cos(i) == -0) {
count++;
printf("Count: %d", count);
}
}
Run Code Online (Sandbox Code Playgroud)
使用值2R作为r,我应该使计数增加一次,但if语句的计算结果为false.我不确定我应该将float转换为零,也不应该检查-0.无论如何,这是此代码片段中print语句的输出.
它看起来cos(M_PI_2)实际上是等于-float(0)所以为什么要cos(M_PI_2) == -float(0)评估false?我几天前刚开始接受c ++,所以如果这是微不足道的话我会道歉.
我有一个表单输入来获取一个数字(这是一个价格).它可以是像小数字102,5.我必须将它与例如102,6的其他小数进行比较.怎么办呢?我不想使用round()因为我可以完全比较.
我想比较两个落在[0.0,1.0]的双打.
我的功能(取自/sf/answers/1213901/) -
inline bool isEqual(double x, double y)
{
const double epsilon = 0.000001;
return fabs(x - y) < epsilon;
}
Run Code Online (Sandbox Code Playgroud)
用法-
cerr << isEqual(1.000001, 1.000002) << endl;
cerr << isEqual(1.000010, 1.000020) << endl;
Run Code Online (Sandbox Code Playgroud)
输出是 -
0
0
Run Code Online (Sandbox Code Playgroud)
而我期待第一个true,第二个false.请告诉我哪里出错了以及如何解决?
我有一个结构矢量.我需要检查结构是否在向量中.整个结构,而不是任何特定的成员.它在编译时抛出了这个错误:
binary '==' : no operator found which takes a left-hand operand of type 'NavigationNode'
(or there is no acceptable conversion)
Run Code Online (Sandbox Code Playgroud)
我的结构:
struct NavigationNode{
int x, y; //their x and y position on the grid
float f, g, h;
int parentGCost;
int value;
};
NavigationNode currentNode;
Run Code Online (Sandbox Code Playgroud)
矢量
vector<NavigationNode> openList;
Run Code Online (Sandbox Code Playgroud)
我的发现:
if (find(closedList.begin(), closedList.end(), currentNode) == closedList.end() )
{
}
Run Code Online (Sandbox Code Playgroud) 我正在研究一个涉及计时的c ++程序,在这个程序中,我必须确定一个时间的模数,以毫秒(一个长)为单位.通常会将long转换为double并使用fmod或将double转换为int/long然后使用%.然而,这不会给我我需要的准确性.有没有办法轻松处理这个?
所以我正在寻找的是:
long a = 9999999;
double b= 1.42 ;
double answer = a % b; <<< how do I do this?
Run Code Online (Sandbox Code Playgroud) 我是c的初学者.我被赋予了一个任务,检查用户是否可以用3个角度的输入形成三角形,并且还必须将三角形的类型(例如斜角,斜角等)打印到屏幕上.我需要分两部分执行此操作,并尝试在主要部分中执行第一部分,同时将第二部分声明为函数.
但是,似乎我不能在函数中使用主函数中使用的相同变量而不再声明它.有没有办法实现这个目标?
我用Google搜索并了解了全局变量,然而,它是否真的适用于这种情况,因为变量的值是用户输入,因此无法在主脚本和其他函数之外执行?
这是我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(){
double ang1,ang2,ang3;
printf("This program determines if a triangle can be formed with an input of 3 angles.\n");
printf("Enter the first angle: ");
scanf("%lf",&ang1);
printf("\nEnter the second angle: ");
scanf("%lf",&ang2);
printf("\nEnter the third angle: ");
scanf("%lf",&ang3);
if (ang1<=0.000000 || ang2<=0.000000 || ang3<=0.000000){//handles any angles below or equal to 0 degrees
printf("\nError 404: Angle(s) are not above 0 degrees.\nPlease restart the program again\n");
}
else{
if (ang1+ang2+ang3==180.000000){ //checks if angles add up to …Run Code Online (Sandbox Code Playgroud) 我有一个我正在分析的代码片,但我不明白这一行:
double level = 0;
...
if (!(level == level) && !(level < level) && !(level > level))
exit(0);
Run Code Online (Sandbox Code Playgroud)
我认为这是关于双重比较的主题.知道它是什么?
以下是if和else的程序
#include<stdio.h>
#include<conio.h>
int main()
{
float a = 0.7; //a declared as float variable
if(a == 0.7) //why it takes only integral part of 0.7
{
printf("Hi");
}
else
{
printf("hello");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这个程序不应该显示Hi而不是hello0.7等于0.7吗?
(我是C编程的新手)
int main()
{
float a = 0.8;
if (a == 0.8)
printf("x\n");
else
printf("y\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
虽然a等于0.8,但它输出y.
我见过这样的帖子:
和许多其他相关的帖子.
我在d3js库中看到,它使用以下比较:
return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
Run Code Online (Sandbox Code Playgroud)
可以在C/C++中使用它来进行比较double和float吗?