繁体   English   中英

浮点模量混乱

[英]Confusion in floating-point modulus

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

这是两个经过测试的程序:

Java程序输出为3.2999997

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

#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将float的精度视为6-7个十进制数字,但我不知道此输出是怎么来的? 我在网上研究了这个问题,但没有找到背后的逻辑。

Java程序正在使用float 但是C ++程序声明了float并使用了我认为是double浮点字面量的文字。

在您的Java程序中,我也获得了3.2999997 ,但是当我将double更改为double ,输出与C ++程序的输出匹配: 8.881784197001252E-16demo )。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM