java - Java 和 C# 之间 double 精度的差异

标签 java c# double precision

This does not answer the question.

我在 Java 和 C# 中运行完全相同的代码,但它给出了两个不同的结果。

为什么?由于两种语言的 double 具有完全相同的 specifications :

double is a type that represents 64-bit IEEE 754 floating-point number in Java

double is a type that represents 64-bit double-precision number in IEEE 754 format in C#.


Java

double a = Math.pow(Math.sin(3), 2);
double b = Math.pow(Math.cos(3), 2);
System.out.println(a);   // 0.01991485667481699
System.out.println(b);   // 0.9800851433251829
System.out.println(a+b); // 0.9999999999999999

C#

double a = Math.Pow(Math.Sin(3), 2);
double b = Math.Pow(Math.Cos(3), 2);
Console.WriteLine(a);   // 0.019914856674817
Console.WriteLine(b);   // 0.980085143325183
Console.WriteLine(a+b); // 1

最佳答案

这只是 C# 与 writeLine 方法一起使用的精度。参见 https://msdn.microsoft.com/en-us/library/dwhawy9k.aspx#GFormatString其中指定 G 格式说明符提供 15 位精度。

如果你写:

Console.WriteLine(a.ToString("R"));

它打印 0.019914856674816989

关于java - Java 和 C# 之间 double 精度的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33743481/

相关文章:

c++ - 为什么看起来 cin 将我的 double 输入转换为整数? C++

java - 我们总是需要关闭流吗?

java - ClassPool.getDefault();在 Javassist 中什么都不做

Java自然归并排序实现

c# - 如何在 Xamarin 表单 macos 的条目(用于聊天)中添加自定义图像?

java - 只是字符串中的数字

java - servlet 支持两种输出格式的标准做法

c# - 具有不变名称 'MySql.Data.MySqlClient' 的 ADO.NET 提供程序未在计算机或应用程序配置文件中注册

c# - MVVM 最佳实践 - 直接使用模型列表成员的引用或制作副本?

c# - 创建一个易于理解的双向链表