[英]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-16
( demo )。
无论哪种方式,由于两种语言中的浮点数都可能不精确,因此您无法使用真正的数学值0
。 float
值必须更加不准确,因为它们更加不精确,因此是一个不同的值,小于3.3。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.