/*
平方根を自前で求めるプログラム
*/
#include <stdio.h>
// 平方根の誤差。小さいほど正確な平方根が求められる
#define SQRT_F 0.0000001
double myabs(double n){ return (n<0.0) ? -n : n ; }
// nの平方根を求める関数
double mysqrt( double n ){
double ret=0.0, pre=0.0, plus=1.0;
do{
pre=ret;
ret+=plus;
if( ret*ret > n ){ // 飛び越したら値を戻し、加算値を減らす
ret=pre;
plus*=0.1;
}
} while( myabs(n-ret*ret) > SQRT_F );
return ret;
}
#define FUNC(_PARAM_) printf("%lfの平方根は%lfです。\n", _PARAM_, mysqrt(_PARAM_) )
int main(void) {
FUNC(1.0);
FUNC(2.0);
FUNC(3.0);
FUNC(4.0);
FUNC(5.0);
FUNC(6.0);
FUNC(7.0);
FUNC(8.0);
FUNC(9.0);
FUNC(16.0);
return 0;
}
LyoK5bmz5pa55qC544KS6Ieq5YmN44Gn5rGC44KB44KL44OX44Ot44Kw44Op44OgCiovCgojaW5jbHVkZSA8c3RkaW8uaD4KCi8vIOW5s+aWueagueOBruiqpOW3ruOAguWwj+OBleOBhOOBu+OBqeato+eiuuOBquW5s+aWueagueOBjOaxguOCgeOCieOCjOOCiwojZGVmaW5lIFNRUlRfRiAwLjAwMDAwMDEKCmRvdWJsZSBteWFicyhkb3VibGUgbil7IHJldHVybiAobjwwLjApID8gLW4gOiBuIDsgfQovLyBu44Gu5bmz5pa55qC544KS5rGC44KB44KL6Zai5pWwCmRvdWJsZSBteXNxcnQoIGRvdWJsZSBuICl7Cglkb3VibGUgcmV0PTAuMCwgcHJlPTAuMCwgcGx1cz0xLjA7CgkKCWRvewoJCXByZT1yZXQ7CgkJcmV0Kz1wbHVzOwoJCWlmKCByZXQqcmV0ID4gbiApeyAvLyDpo5vjgbPotorjgZfjgZ/jgonlgKTjgpLmiLvjgZfjgIHliqDnrpflgKTjgpLmuJvjgonjgZkKCQkJcmV0PXByZTsKCQkJcGx1cyo9MC4xOwoJCX0KCX0gd2hpbGUoIG15YWJzKG4tcmV0KnJldCkgPiBTUVJUX0YgKTsKCQoJcmV0dXJuIHJldDsKfQoKI2RlZmluZSBGVU5DKF9QQVJBTV8pIHByaW50ZigiJWxm44Gu5bmz5pa55qC544GvJWxm44Gn44GZ44CCXG4iLCBfUEFSQU1fLCBteXNxcnQoX1BBUkFNXykgKQoKaW50IG1haW4odm9pZCkgewoJRlVOQygxLjApOwoJRlVOQygyLjApOwoJRlVOQygzLjApOwoJRlVOQyg0LjApOwoJRlVOQyg1LjApOwoJRlVOQyg2LjApOwoJRlVOQyg3LjApOwoJRlVOQyg4LjApOwoJRlVOQyg5LjApOwoJRlVOQygxNi4wKTsKCQoJcmV0dXJuIDA7Cn0K