Вход на сайт
Mod(x,y) modulo ne mogu pos4itat:(
151
26.10.04 12:37
Надо посчитать остаток от деления 2х очень длинних чисел - для этого я использую long double и для вычисления остатка функцию fmodl(long double,long double) но проблема в том что ета фукция выдает постоянно остаток =0. это происходит наверное из-за плавающей запятои (округляется само) что делать даже не знаю, хелп, 4исло вот:
15241578791091755218999
делить надо сна4ала на 2, потом на 3 и т.д. (разложить на простые)
Is this the real world, Neo?
15241578791091755218999
делить надо сна4ала на 2, потом на 3 и т.д. (разложить на простые)
Is this the real world, Neo?
Is this the real world, Neo?
NEW 26.10.04 15:36
2 Chipolino
Попробуй так:
#include <math.h>
printf("%llf\n",fmodl( 15241578791091755218999.0, 2.0))
-----------------------
и пролинкуй mathlib:
gcc *.c -o prg.exe -lm
--------------------------------
дада с делением больших чисел у меня в С огромнейшый касяк - делить вооше не может - порой доходит до такого, что делит тока до запятой, после запяпятои ,000000 выдает, почему не пойму (это тока при больших числах 10-15 цыфр)
а умножает нормально, кто знает, хелп плиз!
Попробуй так:
#include <math.h>
printf("%llf\n",fmodl( 15241578791091755218999.0, 2.0))
-----------------------
и пролинкуй mathlib:
gcc *.c -o prg.exe -lm
--------------------------------
дада с делением больших чисел у меня в С огромнейшый касяк - делить вооше не может - порой доходит до такого, что делит тока до запятой, после запяпятои ,000000 выдает, почему не пойму (это тока при больших числах 10-15 цыфр)
а умножает нормально, кто знает, хелп плиз!
Is this the real world, Neo?
NEW 26.10.04 16:14
в ответ genocidee 26.10.04 12:37
Есть такая известная книга Numerical Recipes (в вариантах C, FORTRAN, C++)
http://www.nr.com
Доступна по главам
http://www.library.cornell.edu/nr/cbookcpdf.html
Конкретно про большие числа
http://www.library.cornell.edu/nr/bookcpdf/c20-6.pdf
http://www.nr.com
Доступна по главам
http://www.library.cornell.edu/nr/cbookcpdf.html
Конкретно про большие числа
http://www.library.cornell.edu/nr/bookcpdf/c20-6.pdf
NEW 26.10.04 16:56
Переглючивает гцц, не то число идет в переменную.
#include <stdio.h>
#include <math.h>
void main(){
long double number = 15241578791091755218999.0;
printf ("%Lf\n", number,0);
}
gcc -Wall -lm math.c
math.c:4: warning: return type of `main' is not `int'
a.out
15241578791091755286528.000000
---
This program requires Volkov Commander . (2:460/66.13)
#include <stdio.h>
#include <math.h>
void main(){
long double number = 15241578791091755218999.0;
printf ("%Lf\n", number,0);
}
gcc -Wall -lm math.c
math.c:4: warning: return type of `main' is not `int'
a.out
15241578791091755286528.000000
---
This program requires Volkov Commander . (2:460/66.13)
NEW 26.10.04 22:41
в ответ genocidee 26.10.04 17:12
Вот библиотека для чисел с неограниченной (практически) точностью на C
http://swox.com/gmp/
Это на C++
http://www.ginac.de/CLN/index_normal.html
Это немного не в тему, но к слову пришлось: библиотека символьной математики на C++
http://www.ginac.de/
http://swox.com/gmp/
Это на C++
http://www.ginac.de/CLN/index_normal.html
Это немного не в тему, но к слову пришлось: библиотека символьной математики на C++
http://www.ginac.de/
NEW 27.10.04 09:10
Не умирай.
Действительные числа (float) хранятся в виде (упрощенно говоря)
sign * x * 2^y,
http://www.psc.edu/general/software/packages/ieee/ieee.html
http://en.wikipedia.org/wiki/IEEE_floating-point_standard
где
sign= 1 or sign=-1
0.0<x<1.0
y - integer
При этом число значащих цифр после запятой определяется числом бит
в представлении x. Т.е. число 15241578791091755218999=1.5241578791091755e 22
хранится в RAM в виде (64 bits)
0 10001001000 1 .1001110100011111101100101011101010010011100001111110
= 1 * 1.6137649255283857 * 2^73
http://babbage.cs.qc.edu/courses/cs341/IEEE-754.html
где число цифр после запятой ограничено!!!
Есть ещё пара тонкостей, но идея приведена выше.
Действительные числа (float) хранятся в виде (упрощенно говоря)
sign * x * 2^y,
http://www.psc.edu/general/software/packages/ieee/ieee.html
http://en.wikipedia.org/wiki/IEEE_floating-point_standard
где
sign= 1 or sign=-1
0.0<x<1.0
y - integer
При этом число значащих цифр после запятой определяется числом бит
в представлении x. Т.е. число 15241578791091755218999=1.5241578791091755e 22
хранится в RAM в виде (64 bits)
0 10001001000 1 .1001110100011111101100101011101010010011100001111110
= 1 * 1.6137649255283857 * 2^73
http://babbage.cs.qc.edu/courses/cs341/IEEE-754.html
где число цифр после запятой ограничено!!!
Есть ещё пара тонкостей, но идея приведена выше.
NEW 27.10.04 13:49
в ответ Russman 27.10.04 13:00
Как раз это и обьясняет.
Любое число хранится в формате с ОГРАНИЧЕННЫМ числом десятичных
знаков после запятой.
Т.е. к примеру если это число равно 3, то
1.0000 не отличим от 1.0001 (вернее 1.000 может быть любым от 0.999 до 1.001).
Однако для числа 1.0000*10^20 ошибка представления составляет уже не
0.001 (три знака после запятой) а
0.001*10^20=10^17
(т.е. 1.000*10^20 определяет число от 0.999*10^20 до 1.001*10^20).
Так понятней?
Для числа x=2.34*10^300 при точности хранения 20 десятичных знаков
погрешность представления 1*10^280.
Любое число хранится в формате с ОГРАНИЧЕННЫМ числом десятичных
знаков после запятой.
Т.е. к примеру если это число равно 3, то
1.0000 не отличим от 1.0001 (вернее 1.000 может быть любым от 0.999 до 1.001).
Однако для числа 1.0000*10^20 ошибка представления составляет уже не
0.001 (три знака после запятой) а
0.001*10^20=10^17
(т.е. 1.000*10^20 определяет число от 0.999*10^20 до 1.001*10^20).
Так понятней?
Для числа x=2.34*10^300 при точности хранения 20 десятичных знаков
погрешность представления 1*10^280.