私のプログラムで作成された出力は、最初は正確で、5000000以上のすべての回答で0になります。私がHeron's Areaと呼ばれる関数を使用すると、 。三角形の浮動小数点数の問題
#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
この問題は、[解決策がwikipediaにある](https://en.wikipedia.org/wiki/Heron%27s_formula#Numerical_stability) – harold