как реализовать функцию ln в с++?
Решить e^x=y ?
Просуммировать ряд
логарифм это вроде как примитив сопроцессора, вот я тут нагуглил инструкцию - FYL2X.
FYL2XВ С++ такого нет
[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
во-вторых, решить exp(x)=y методом того же ньютона. хотя если нету log, то наличие exp сомнительно (или хотя бы правомерность его использования)
ну и в третьих, просуммировать ряд
тут нужно слегка извернуться и подумать, как бы посчитать ln(e) - видно, что ряд будет расходится.
хинт - а как бы вы считали sin(50)?
Ассемблерные вставки входят в стандарт C++ или это расширение компилятора?
ты правда думаешь это важно?
у человека нет цели "реализовать функцию ln в соответствии со стандартом С++", у него какая-то конкретная практическая задача, скорее всего сдать зачот =) для этой задачи мое решение может не подойти, а может и подойти, вот и весь вопрос, при чем тут стандарт С++ вообще
кстати если уж из академического интереса, то есть еще вариант 1/x численно интегрировать.
что-то не работает, все равно спасибо.
#include <iostream>
#include <math.h>
int main
{
std::cout << log(2.0) << std::endl;
return 0;
}
вывод
0.693147
всем спасибо. долго тупил, а проверить - пара секунд.
Оставить комментарий
UAV27
?