как реализовать функцию ln в с++?

UAV27

?

Makc500

Решить e^x=y ?

Gaishnik

Просуммировать ряд

rosali

логарифм это вроде как примитив сопроцессора, вот я тут нагуглил инструкцию - FYL2X.

Gaishnik

FYL2X
В С++ такого нет

rosali

как так нет ;)

[xoft ~]$ cat test.cpp
#include <iostream>
using namespace std;

float ln(float x) {
float lnx;

asm (
"finit;"
"fldln2;"
"fld %1;"
"fyl2x;"
"fst %0;"
: "=m" (lnx)
: "m" (x)
);

return lnx;

}

int main
{
cout << ln(2) << endl;
}

[xoft ~]$ g++ -O3 -o test test.cpp

[xoft ~]$ ./test
0.693147

yolki

ну во-первых, есть log(x)
во-вторых, решить exp(x)=y методом того же ньютона. хотя если нету log, то наличие exp сомнительно (или хотя бы правомерность его использования)
ну и в третьих, просуммировать ряд

тут нужно слегка извернуться и подумать, как бы посчитать ln(e) - видно, что ряд будет расходится.
хинт - а как бы вы считали sin(50)?

Gaishnik

Ассемблерные вставки входят в стандарт C++ или это расширение компилятора?

smit1

ы

rosali

> входят в стандарт
ты правда думаешь это важно?
у человека нет цели "реализовать функцию ln в соответствии со стандартом С++", у него какая-то конкретная практическая задача, скорее всего сдать зачот =) для этой задачи мое решение может не подойти, а может и подойти, вот и весь вопрос, при чем тут стандарт С++ вообще ;)
кстати если уж из академического интереса, то есть еще вариант 1/x численно интегрировать.

sergeikozyr

[math]  $  \ln\frac{1+x}{1-x}=\ln(1+x)-\ln(1-x)=(x-\frac{x^2}{2}+\frac{x^3}{3}+\ldots)-(-x-\frac{x^2}{2}-\frac{x^3}{3}+\ldots)=  2x(1+\frac{x^2}{3}+\frac{x^4}{5}+\ldots)  $  [/math]

UAV27

что-то не работает, все равно спасибо. :(

Dasar

а чем функция log не устраивает?
#include <iostream>
#include <math.h>
int main
{
std::cout << log(2.0) << std::endl;
return 0;
}
вывод
0.693147

UAV27

всем спасибо. долго тупил, а проверить - пара секунд.
Оставить комментарий
Имя или ник:
Комментарий: