我有以下代码进行双重比较.为什么我执行时变得不平等?
#include <iostream>
#include <cmath>
#include <limits>
bool AreDoubleSame(double dFirstVal, double dSecondVal)
{
return std::fabs(dFirstVal - dSecondVal) < std::numeric_limits<double>::epsilon();
}
int main()
{
double dFirstDouble = 11.304;
double dSecondDouble = 11.3043;
if(AreDoubleSame(dFirstDouble , dSecondDouble ) )
{
std::cout << "equal" << std::endl;
}
else
{
std::cout << "not equal" << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud) 根据这篇文章,当比较float和double时,float应被视为double.以下程序似乎没有遵循此声明.这种行为看起来非常不可预测.这是我的计划:
void main(void)
{
double a = 1.1; // 1.5
float b = 1.1; // 1.5
printf("%X %X\n", a, b);
if ( a == b)
cout << "success " <<endl;
else
cout << "fail" <<endl;
}
Run Code Online (Sandbox Code Playgroud)
我还打印了值的十六进制表示法.它们在两种情况下都不同.我的编译器是Visual Studio 2005
你能解释一下这个输出吗?谢谢.
可能有人问过关于查找点是否在一条线上但不是在这种情况下的问题,他们没有回答为什么各种方法都有不同的缺陷。给定点的坐标和线的坐标,准确找到点是否在一条线上的最佳方法是什么?我试图自己实现某些方法,但经过测试,它们似乎都有自己的问题。我确定还有其他方法,我知道 Java 有一种方法可以计算点与直线的距离,如果在直线上,则返回 0。Java 用什么方法判断一个点是否在一条线上?
第一种方法将 A 点到 B 点的距离与 A 点到 C 点加上 C 点到 B 点的距离进行比较。这种方法的问题在于它不精确,因为它使用 Math.sqrt。
public static boolean inLine(double x1, double y1, double x2, double y2, double x3, double y3){
if((distance(x1, y1, x3, y3) + distance(x2, y2, x3, y3)) == distance(x1, y1, x2, y2)){
return true;
}
return false;
}
public static double distance(double x1, double y1, double x2, double y2){
double base = x2 - x1;
double height = y2 - y1;
double hypotenuse …Run Code Online (Sandbox Code Playgroud) #include<stdio.h>
int main()
{
float x = 0.6;
if (x == 0.6)
printf("IF");
else if (x == 0.6f)
printf("ELSE IF");
else
printf("ELSE");
}
Run Code Online (Sandbox Code Playgroud)
此代码提供输出ELSE IF
#include<stdio.h>
int main()
{
float x = 0.5;
if (x == 0.5)
printf("IF");
else if (x == 0.5f)
printf("ELSE IF");
else
printf("ELSE");
}
Run Code Online (Sandbox Code Playgroud)
此代码提供输出IF
尽管两个程序看起来都相同,但为什么输出有差异?为什么会这样?
可以找到以下系列的无穷大之和:
1 1/2 1/3 1/4 1/5 ...
Run Code Online (Sandbox Code Playgroud)
根据某位科学家的解释,无穷大是指任何点都不存在的点,即inf + x = inf或inf~(inf + x)= 0.因此,基于该理论,使用以下算法:
float sum=0.0;
for(int i=0;;i++){
if((sum+(1.0/i))==sum)
break;
sum+=(1.0/i);
}
/* print the value of sum */
Run Code Online (Sandbox Code Playgroud)
算法在C和JAVA中运行,两者都输出为inf.分别用C和Java编写的print语句是
printf("%6f",sum);
System.out.println(sum);
Run Code Online (Sandbox Code Playgroud)
编辑: 之前写的代码(在问题中)有一个错误,因为我键入它,没有复制粘贴.对不起.这解决了,这是我的问题的代码:
float sum=0.0;
for(int i=1;;i++){
if((sum+ (1.0/i))==sum)
break;
sum+=(1.0/i);
}
/*print the value of sum*/
Run Code Online (Sandbox Code Playgroud)
我的一个朋友说他把输出作为C中的有限小数.但在我的情况下,程序永远不会终止,无论是在C语言还是Java语言中(这个输出来自上面发布的新编辑代码.不要考虑以前的错误代码,它的输出是"INF".)我的问题是,是这算法可以接受?如果是,那么我想知道可能导致C中的不同输出.谢谢.
do
{
swap=false;
for(int i=0; i<256; i++)
{
if(pd[i]<pd[i+1])
{
int temp=pd[i];
pd[i]=pd[i+1];
pd[i+1]=temp;
swap=true;
}
}
}
while(swap);
Run Code Online (Sandbox Code Playgroud)
它只能正确返回前两个结果,其余为0.我正在排序浮点数.
我想在swift中比较两个double值
var first_value = 10.20
var second_value = 20.30
if first_value > second_value
println("some statement")
Run Code Online (Sandbox Code Playgroud)
我们怎么能比较这种类型的东西..
我是一个非常有经验的Java程序员,具有C++背景,但我只是在我的一个编程课程中开始使用C,这让我很疯狂.这是第一个任务.它应该计算球体的体积或表面积.问题是"半径"等于零,即使用户输入了值."模式"工作得很好,这似乎很奇怪.这是代码:
#include <stdio.h>
#define PI 3.14
int main()
{
float radius;
int mode;
printf("\nPlease enter a non-negative radius of a sphere: ");
scanf("%f", &radius);
printf("Please enter 1 for volume, 2 for area: ");
scanf("%d", &mode);
if (radius = 0)
{
printf("\n\nPlease enter a positive radius, instead of %f.", radius);
}
else
{
float area = 4 * PI * radius * radius;
float volume = (4.0f / 2.0f) * PI * radius * radius * radius;
float result = 0; …Run Code Online (Sandbox Code Playgroud)