我的程序創建的輸出首先是準確的,然後在5000000以上的所有答案變成0。我想知道爲什麼這是這種情況,當我使用函數我稱之爲蒼鷺的面積。三角形面積的浮點難度
#include "stdafx.h"
#include "stdlib.h"
#include <iostream>
#include <math.h>
#include <stdio.h>
float heron_area(float a, float c) {
float s = (a + a + c)/2.0f;
return (s - a)*sqrtf(s*(s - c));
}
int main(void) {
int j = 18;
float i = 10;
for (int k = 0; k < j; k++){
float g = i * 10;
std::cout << heron_area(g, 1) << std::endl;
i = g;
}
return 0;
}
這可能與使用浮點數的問題有關。爲什麼在最後一次輸出500000後得到0的輸出?
使用double來代替浮動 – seccpur
這個問題是衆所周知的[解決方案在維基百科上](https://en.wikipedia.org/wiki/Heron%27s_formula#Numerical_stability) – harold