iT邦幫忙

1

#C語言 請問浮點數比較問題(已解決)

e04 2023-02-06 23:52:52775 瀏覽
  • 分享至 

  • xImage

想請問浮點數做完加減乘除後要怎麼判定是否為0
爬文看網路上的說法是用EPSINON=0.000001
但是改了之後依舊跑不出預設的答案
問過其他人說可以用long double接值試試但也無法跑出正確的結果
有大神知道該怎麼修改嗎 求解 感謝~~
(把for裡面i, j ,k的型態改為int就正確了,for裡面用浮點數可能會有問題)

#include<stdio.h>
int main(){
	double x, y, z;
	printf("請輸入一長度不為0的向量: ");
	scanf("%lf %lf %lf", &x, &y, &z);
	while(x==0.0 && y==0.0 && z==0.0){
		printf("\n請輸入一長度不為0的向量: ");
		scanf("%lf %lf %lf", &x, &y, &z);
	}
	
	double i, j, k;
	int count=0;
	for(i=-5;i<=5;i++){
		for(j=-5;j<=5;j++){
			for(k=-5;k<=5;k++){
				long double a=x*i, b=y*j, c=z*k, sum=a+b+c;
				/*printf("%lf %lf %lf %lf", a, b, c, sum);
				printf("%lf %lf %lf", i, j, k);*/
				const float EPSINON=0.000001;
				if((sum>= -EPSINON) && (sum<=EPSINON)){ 
				//整數*小數可直接轉存為小數,但整數*小數不可直接轉存為整數需先轉型(int) 
				/*if(sum==0.000000)*/
					if(i!=0 && j!=0 && z!=0){
					count++;
					}
				}
			}	
		}
	}
	printf("\n共找到: %d 個", count);

參考執行範例如下:
https://ithelp.ithome.com.tw/upload/images/20230206/201575339PZx8GFljw.jpg

標題打這樣我以為C# XD
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答