我非常了解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认为浮点数的精度是6-7小数位,但是我不知道这个输出是怎么来的?我在网上研究了这个问题,但没有发现背后的逻辑。
发布于 2014-06-11 16:55:01
Java程序使用的是float,但是C++程序正在声明floats,并使用我假设的double浮点文本。
在您的Java程序中,我也得到了3.2999997,但是当我更改为double时,输出与C++程序的输出:8.881784197001252E-16 (演示)相匹配。
无论哪种方法,您都与0的真正数学值脱节,因为两种语言中的浮点数都可能不精确。float值必须更不准确,因为它们更不精确,因此有一个不同的值,略小于3.3。
https://stackoverflow.com/questions/24168387
复制相似问题