我非常了解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位十进制数字,但我不知道这个输出是怎么来的?我在网上研究了这个问题,但没有找到这背后的逻辑。
答案 0 :(得分:7)
Java程序正在使用float
。但是C ++程序声明float
并使用我假设的double
浮点文字。
在你的Java程序中我也得到3.2999997
,但是当我改为double
时,输出与你的C ++程序的输出相匹配:8.881784197001252E-16
(demo)。< / p>
无论哪种方式,你都离开0
的真正数学值,因为两种语言中的浮点数都不准确。 float
值必须更加不准确,因为它们更不精确,因此值不同,略小于3.3。