У меня есть ++ код C и октава, что оба вычислить то же уравнениеРезультатов С ++ и Октавных отличаются для простых арифметического
В C++
#include <math.h>
int main()
{
float x = 1.5f;
float y = pow(x, 6) * 235809835.41f - pow(x, 5) * 2110439254.2f + pow(x, 4) *7869448124.8f - pow(x, 3) * 15648965509.0f + pow(x, 2) * 17503313074.0f - (x)* 10440563329.0f + 2594694745.0f; // result y = 3584
return 0;
}
в октавном
x = 1.5
y = (x^6) * 235809835.41 - (x^5) * 2110439254.2 + (x^4) *7869448124.8 - (x^3) * 15648965509 + (x^2) * 17503313074 - (x)* 10440563329 + 2594694745 // result y = 26
Вычисленное значение of y отличается в двух случаях. C++ вычисляет y как 3584, а Octave вычисляет y как 26. Что может быть причиной этого расхождения?
EDIT: Excel производит тот же результат, что и Octave, и результат также логичен в контексте уравнения. Итак, что-то не так с кодом C++ или компилятором.
FWIW, Максима показывает результат будет 26.81078290939331. Не уверен, что округляет Octave ... – cdhowie
Скорее всего, у вас будет значительная потеря точности на C++ из-за отмены, в то время как Octave может рассчитывать с расширенной точностью или переупорядочивает порядок операций. –
октава 3.8.2 дает 26.811, как и должно быть. Вы округлились до самого низкого значения? – ederag