نمایش نتایج 1 تا 11 از 11

نام تاپیک: ذخیره اعداد بزرگ در سی

  1. #1

    Thumbs down ذخیره اعداد بزرگ در سی

    سلام
    عدد 10^4 به بالا را چجوری میشه نگهداری کرد ؟
    تو سی

  2. #2
    سلام،
    فکر می کنم int64__ به دردتون بخوره. ولی آخه شما تو چه محیطی کار می کنین؟ مطمئن نیستم اینی که گفتم استاندارد هست یا نه، ولی اگه درست یادم باشه یکی دو جا اشاراتی دیدم که C99 از این نوع پشتیبانی می کنه. من که تو 2003 ++VC به کار می برم و خوب کار می کنه.

  3. #3
    کاربر دائمی آواتار alireza643
    تاریخ عضویت
    شهریور 1384
    محل زندگی
    روی زمین
    پست
    368
    یه آرایه هم میتونید درست کنید که هر عنصر اون یکی از ارقام عدد مورد نظر باشه که این دیگه واسه اعداد خیلی بزرگه ولی تمام اعمال رو باید دستی بنویسید.

  4. #4
    به هر حال بالاخره باید آرایه رو هم بازیابی کنیم و عدد به دست اومده رو تو حافظه استفاده کنیم اون موقع باز مشکل تعریف متغیر به اون بزرگی پیش میاد!

  5. #5
    کاربر دائمی آواتار yashar666
    تاریخ عضویت
    شهریور 1385
    محل زندگی
    طهران
    پست
    332
    اگه عدد شما از نوع عشاری خیلی بزرگ باشه ازdouble استفاده کنی فکر کنم مشکلی نباشه اگه هم int هست از int64

  6. #6
    دوستان من با سی برنامه می خوام اون که تو یه صفحه داسی باز میشه
    اما این چیزارو امتحان کردم هیچ کدوم فایده نداره اگرم تو آرایه بریزم همون جور که دوستمون گفتن در هنگام بازیابی کارو خراب میکنه در واقع راهش رو پیدا کردم اما نه کاملا
    اگر از دبل استفاده شه اعداد کوچیک رو وقتی بخواهیم ازش پرینت اف بگیریم 0 نمایش میده
    برای اعداد بزرگ هم اشتباه نمایش میده
    اما راه همینه استفاده از دبل و برای رفع مشکل در هنگام پرینت اف هم باید با درصد اف نمایش داده شود که این هم یه مشکل ایجاد می کند عدد به صورت اعشاری نمایش داده می شود و در هنگام انجام عملیات مثلا اگر با عدد 11111111111111111111111 کار می کردیم
    حالا به عدد 11111111111111111110700 می رسیم یعنی از عدد ما کاسته شده اما با امتحان هایی که کردم این مربوط میشه به نمایش عدد و عدد در حافظه همچنان 11111111111111111111111 است و از آن اپسیلونی کم نمی شود اما چجوری متغییر را نمایش دهیم؟!

  7. #7
    اتفاقا من هم دارم یه پروژه می نویسم که توی اون از اعداد بزرگ متشکل از صفر و یک مثل 0111001111011101 استفاده می کنم من ابتدا این عدد رو به شکل یک رشته میگیرم و سپس با توابعی مثل atol یا strtod اونو تبدیل می کنم ولی 2 تا مشکل دارم اول اینکه در هنگام تبدیل اون صفر اولی لحاظ نمیشه اما از این مشکل که طبیعیه بگذریم موندم این عدد رو تو چه متغیری بریزم و مهمتر اینکه با چه % اون رو پرینت کنم؟

  8. #8
    انگار تنها راه همینه که همون طور که گفتم با آرایه کار کنید و نهایتن اونو تو یه دبل بریزین ولی نمایشش ندین و دوباره اونو تو آرایه برگردونین حالا آرایه را چاپ کنین
    چون اون متغییر تو حافظه صحیحه

  9. #9
    خوب اینطوری اگه بخواییم با عدد مورد نظر کارای محاسباتی بکنیم با مشکل روبرو میشیم؟!

  10. #10
    نه برا چی؟

  11. #11
    double توانائی ذخیره سازی اعداد بزرگ رو داره ولی تا 17 رقم با معنی رو بیشتر نمیتونه پشتیبانی کنه. یا به عبارتی اگر شما کل ارقامتون عددی غیر صفر باشه 17 تا شو بیشتر نمی تونه براتون نگه داره ولی اگه 16 تا رقم غیر صفر داشته باشید و در انتها تعداد زیادی صفر داشته باشید میتونه واسه تون نگهداری کنه. امیدوارم مفهوم حرفم رو درک کرده باشید اگر اینطور نیست بد نیست به معنی ارقام با معنی در ریاضیات(اگه اشتباه نکنم ریاضیات گسسته) یه نگاهی بندازید.



    همونطور که یکی از دوستان هم گفتن ساده ترین روش ذخیره به صورت رشته ای است. و برای نمایش هم باید اعداد را تک تک نمایش بدی و برای عملیات محاسباتی هم باید تابعش رو خودت پیاده سازی کنی.

    اما اگر برای ذخیره سازی بخوای در فضای حافظه صرفه جوئی کنی می تونی به صورت BCD ذخیره اش کنی که در اینصورت مقدار حافظه مصرفی نصف حالت قبل است.

    یه راه دیگه هم استفاده از Integer های چند گانه هست (پیاده سازی Int64) یا بالاتر برای کامپایلر هائی که پشتیبانی نمی کنن. (که باز هم در حافظه صرفه جوئی بیشتری میشه)
    کلا هر سه روش فوق نیاز به یک ADT برای نمایش , خواندن , جمع , تفریق, ضرب,تقسیم و سایر اعمال مورد نیاز روی اون نمونه اعداد دارد
    You never know what you can do until you try

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •