相关疑难解决方法(0)

检查java.lang.Double是否相等的高性能方法

检查双精度值是否相等的最有效方法是什么。

我明白那个

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)

java double comparison junit infinitest

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

为什么cos(M_PI_2)== float(0)计算为false?C++

我试着寻找这个问题的答案,但无济于事.我想要做的是将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 ++,所以如果这是微不足道的话我会道歉.

c++

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

比较PHP中的小数

我有一个表单输入来获取一个数字(这是一个价格).它可以是像小数字102,5.我必须将它与例如102,6的其他小数进行比较.怎么办呢?我不想使用round()因为我可以完全比较.

php

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

C++浮点数问题

可能重复:
浮动和双重比较的最有效方法

我是C++的新手.我在阅读C++时遇到了疑问.如何判断两个浮点数是否相等?

提前致谢

c++ floating-point

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

如何比较5位精度的双打?

我想比较两个落在[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.请告诉我哪里出错了以及如何解决?

c++ precision double

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

检查结构是否在向量中

我有一个结构矢量.我需要检查结构是否在向量中.整个结构,而不是任何特定的成员.它在编译时抛出了这个错误:

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++ struct stdvector

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

在c ++中获得long和double的模数的准确方法

我正在研究一个涉及计时的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++ floating-point floating-accuracy

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

预测三角形是否可以在C中形成3个角度(和三角形的类型)

我是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)

c

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

与自身的双重比较

我有一个我正在分析的代码片,但我不明白这一行:

double level = 0;

...

if (!(level == level) && !(level < level) && !(level > level))
    exit(0);
Run Code Online (Sandbox Code Playgroud)

我认为这是关于双重比较的主题.知道它是什么?

c++

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

该程序打印"hello"而不是"Hi".怎么样?

以下是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编程的新手)

c

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

为什么控件进入"其他"部分?

可能重复:
浮点数和浮点字面值比较浮点数和双重比较奇怪输出的最有效方法

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.

c

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

如何比较浮点数或双倍?

是否有内置库可以比较float或double

我不认为比较a == ba !=b有意义.有什么建议吗?

c++

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

双重或浮动比较

我见过这样的帖子:

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

比较两个花车

和许多其他相关的帖子.

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