GVKun编程网logo

为什么f(Double x)比f(double…x)更好的匹配?(为什么用double和float运算结果不同)

5

本文的目的是介绍为什么f的详细情况,特别关注Doublex比f的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解为什么f的机会,同时也不会遗漏关于AndroidCirc

本文的目的是介绍为什么f的详细情况,特别关注Double x比f的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解为什么f的机会,同时也不会遗漏关于Android Circle进度栏-显示值通常为Double Double、assertEquals(Double,Double)和assertEquals(double,double,delta)之间的Junit差异、c# – 将double与0进行比较是错误的:doubleVariable == 0?、C++:支持 std::complex AND double 的通用 if 语句的知识。

本文目录一览:

为什么f(Double x)比f(double…x)更好的匹配?(为什么用double和float运算结果不同)

为什么f(Double x)比f(double…x)更好的匹配?(为什么用double和float运算结果不同)

今天,我正在为即将参加的Java考试而学习,但遇到了这个问题:

A一个定义如下的类:

class A {    public void f(Double x) { System.out.println("A.f(Double)"); }    public void f(double... x) { System.out.println("A.f(double...)"); }}

该指令产生的输出是什么A a = new A(); a.f(1.0);

答案似乎是,A.f(Double)但我不明白为什么。有人可以给我适当的解释吗?

答案1

小编典典

与具有可变参数列表的函数相比,重载解析始终偏向于使用具有明显数量的参数的函数,即使这意味着该1.0函数是自动装箱的。

更详细地说,根据JLS
15.12.2选择具有此优先级的函数:

  1. 类型加宽
  2. 自动装箱
  3. 可变参数

Android Circle进度栏-显示值通常为Double Double

Android Circle进度栏-显示值通常为Double Double

如何解决Android Circle进度栏-显示值通常为Double Double?

在我的项目中,我需要使用Circle Progress Bar。 我发现了一个非常有趣的存储库:https://github.com/lzyzsd/CircleProgress

但是我有问题。我需要在圆形进度条上显示Double类型的值,但需要Integer。

虽然我可以将进度削减到Integer,但必须在Double中显示它。

我需要帮助来解决这个问题或其他解决方案。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

assertEquals(Double,Double)和assertEquals(double,double,delta)之间的Junit差异

assertEquals(Double,Double)和assertEquals(double,double,delta)之间的Junit差异

我进行了一个junit测试,使用以下命令声明了两个Double对象:

Assert.assertEquals(Double expected, Double result);

很好,然后我决定将其更改为使用原始double,除非您也提供了增量,否则该结果被弃用了。

所以我想知道在assertEquals中使用Double对象还是原始类型有什么区别?为什么不使用不带增量的对象,但不推荐使用不带增量的基元呢?Java是否在后台执行了已经考虑了默认增量值的操作?

谢谢。

答案1

小编典典

没有断言方法的JUnit与签名

assertEquals(Double expected, Double result);

但是,有一个通用的对象:

assertEquals(Object expected, Object result);

这将调用对象的equals方法,并且您可以预期,不建议使用此方法来比较Double对象。

如您所见,对于双精度数,绝对有必要使用增量进行比较,以避免浮点舍入的问题(在其他一些答案中已有说明)。如果您使用assertEquals带有double参数的3参数版本

assertEquals(double expected, double actual, double delta);

您的Doubles会被自动取消装箱,double并且一切都会正常运行(并且测试不会意外失败:-)。

c# – 将double与0进行比较是错误的:doubleVariable == 0?

c# – 将double与0进行比较是错误的:doubleVariable == 0?

可以这样做吗?
double doubleVariable=0.0;
if (doubleVariable==0) {
   ...
}

或者这个代码会受到潜在的四舍五入问题的困扰?

解决方法

不过,如果你只是比较0,那么这个比较完全合法,因为比较的右边会自动加倍.另一方面,如果要与== 0.10000001进行比较,则会产生所有四舍五入的错误

你最好还是阅读关于浮点数的讨论,这里是0比较:Is it safe to check floating point values for equality to 0?

此外,这个讨论对于浮标上的奇怪的精度问题非常有帮助:Why the result is different for this problem?

即下方会产生错误:

double d1 = 1.000001; double d2 =0.000001;
Console.WriteLine((d1-d2)==1.0);

C++:支持 std::complex<double> AND double 的通用 if 语句

C++:支持 std::complex AND double 的通用 if 语句

有没有比下面更聪明的方法 [...] 在某种意义上更聪明 (i) 我不想提取双精度值的 std::real 部分(这可以通过区分类型名来实现在 make_real (ii) 中,我认为可能会重载比较运算符以将它们也用于 double 与 std::complex 比较。

哦,是的。

我不认为这是一个好主意(我不喜欢复杂和浮点之间的 operator<() 的想法)但它是可能的。

您可以按如下方式添加 operator<()

bool operator< (std::complex<double> const & cd,double d)
 { return cd.real() < d; }

或者,如果您希望它更通用,

template <typename D>
bool operator< (std::complex<D> const & cd,D d)
 { return cd.real() < d; }

或者也

template <typename D1,typename D2>
bool operator< (std::complex<D1> const & cd,D2 d)
 { return cd.real() < d; }

以下是您修改的示例。

#include <iostream>
#include <complex>
#include <cmath>

bool operator< (std::complex<double> const & cd,double d)
 { return cd.real() < d; }

using namespace std::complex_literals;

template<typename number=double>
number
compute_number(const number& x,const number& y)
 { return x < 1.0 ? x : y; }

int main()
{
  std::cout << "Evaluate function with double" << std::endl;
  std::cout << compute_number(3.0,4.0) << std::endl;
  std::cout << "Evaluate function with complex number" << std::endl;
  std::cout << compute_number(3.0+2i,4.0-2i) << std::endl;
}

今天关于为什么fDouble x比f的分享就到这里,希望大家有所收获,若想了解更多关于Android Circle进度栏-显示值通常为Double Double、assertEquals(Double,Double)和assertEquals(double,double,delta)之间的Junit差异、c# – 将double与0进行比较是错误的:doubleVariable == 0?、C++:支持 std::complex AND double 的通用 if 语句等相关知识,可以在本站进行查询。

本文标签: