(c) Programa que calcula raiz não esta funcionando como deveria! Qual o erro?

Escrevi esse código. É um programa que que pede o número que se deseja calcular e a precisão do calculo:

#include <stdio.h>
#include <stdlib.h>

double Raiz(double numb, int zero) {
	double zr = 10, re = 10;
	for (int qnt = 1; qnt <= zero; qnt++) {
		zr = zr / 10;
		for (re = re - zr * 10; re <= numb; re += zr) {
			if ((re * re) == numb) return(re);
			if ((re * re) > numb) break;
		}
	}
	return(re - zr);
}

int main() {
	int resp = 1, zero;
	double numb;
	while (resp == 1) {
		printf("Raiz de: ");
		scanf("%lf", &numb);
		printf("Precisao de casas decimais: ");
		scanf("%i", &zero);
		printf("\nRaiz de %lf = %lf.", numb, Raiz(numb, zero));
		printf("\n\nFazer outra operacao? \n1 - Sim \n2 - Nao \n>> ");
		scanf("%i", &resp);
	}
	printf("\n\n");
	system("pause");
	return(0);
}

Quando se pede o calculo do número 300, por exemplo, ele devolve como resultado o mesmo número. Mas quando pedimos o calculo de números que sabemos que tem um resultado inteiro, como 4 ou 25, ele devolve a resposta certa. Qual o erro no código?
Tenho outra duvida: como ocultar os zeros depois da virgula num double? Tipo, ao invés de receber o valor 30.450000, receber apenas 30.45, já que o resto é desnecessário.

Seu cálculo além de está errado e o princípio dele não é eficiente. Nesse link aqui tem várias implementações legais do cálculo da raiz quadrada em linguagem C, dê uma estudada nos algorítmos:
http://www.codeproject.com/Articles/69941/Best-Square-Root-Method-Algorithm-Function-Precisi

[quote=matheuslmota]Seu cálculo além de está errado e o princípio dele não é eficiente. Nesse link aqui tem várias implementações legais do cálculo da raiz quadrada em linguagem C, dê uma estudada nos algorítmos:
http://www.codeproject.com/Articles/69941/Best-Square-Root-Method-Algorithm-Function-Precisi[/quote]

Meu cálculo não está errado!
Na verdade nem o código está errado, apenas errei um pequeno detalhe na hora de copia-lo para o compilador.
Troquei o > por ==.
Mas obrigado pela tentativa!

[quote=Neviat][quote=matheuslmota]Seu cálculo além de está errado e o princípio dele não é eficiente. Nesse link aqui tem várias implementações legais do cálculo da raiz quadrada em linguagem C, dê uma estudada nos algorítmos:
http://www.codeproject.com/Articles/69941/Best-Square-Root-Method-Algorithm-Function-Precisi[/quote]

Meu cálculo não está errado!
Na verdade nem o código está errado, apenas errei um pequeno detalhe na hora de copia-lo para o compilador.
Troquei o > por ==.
Mas obrigado pela tentativa![/quote]
Foi isso mesmo que achei errado.
Agora o seu código não é eficiente. Tente botar ele para calcular a raiz quadrada de 5000000 com 10 dígitos de precisão e verá do que estou falando. Você basicamente fica elevando um número ao quadrado e vai incrementando até atingir o valor do número que você quer achar a raiz. Isso é um processo muito lento.
Leia as soluções no link que eu passei, são bem mais eficientes.

[quote=matheuslmota]Foi isso mesmo que achei errado.
Agora o seu código não é eficiente. Tente botar ele para calcular a raiz quadrada de 5000000 com 10 dígitos de precisão e verá do que estou falando. Você basicamente fica elevando um número ao quadrado e vai incrementando até atingir o valor do número que você quer achar a raiz. Isso é um processo muito lento.
Leia as soluções no link que eu passei, são bem mais eficientes. [/quote]

Realmente… Na verdade eu estou tentando escrever esse programa só pra execitar mesmo, vou dar uma olhada no link! Vlw!