首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >浮点模量的混淆

浮点模量的混淆
EN

Stack Overflow用户
提问于 2014-06-11 16:51:08
回答 1查看 233关注 0票数 1

我非常了解C++,但我是java的初学者。

以下是两个经过测试的程序:

Java程序提供了输出3.2999997

代码语言:javascript
复制
import java.util.*;
import java.lang.*;
import java.io.*;

class Test
{
    public static void main(String args[])
    {
       float f = 9.9f, m = 3.3f;
       float c = f % m;
       System.out.println(c);
    }
}

C++程序给出了输出8.88178e-16

代码语言:javascript
复制
#include <iostream>
#include<math.h>
int main()
{
   float f = 9.9f, m = 3.3f; 
   std::cout << fmod (9.9,3.3);
   return 0;
}

我对C++程序的输出很满意,但是为什么Java没有给出一个大约为零的答案呢?

这怎么可能,因为3.3 * 3 = 9.9

我知道Java认为浮点数的精度是6-7小数位,但是我不知道这个输出是怎么来的?我在网上研究了这个问题,但没有发现背后的逻辑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-11 16:55:01

Java程序使用的是float,但是C++程序正在声明floats,并使用我假设的double浮点文本。

在您的Java程序中,我也得到了3.2999997,但是当我更改为double时,输出与C++程序的输出:8.881784197001252E-16 (演示)相匹配。

无论哪种方法,您都与0的真正数学值脱节,因为两种语言中的浮点数都可能不精确。float值必须更不准确,因为它们更不精确,因此有一个不同的值,略小于3.3。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24168387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档