הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   [PHP] משהו שחשבתי עליו.. (https://hosts.co.il/forums/showthread.php?t=48377)

BlueNosE 26-06-07 20:40

[PHP] משהו שחשבתי עליו..
 
למי שלא יודע יש לPHP מספר (אינטיגר) מקסימלי בו היא תומכת.
המספר נמצא במשתנה PHP_INT_MAX ונכון לעכשיו הוא עומד על 2147483647.
כל מספר שתנסו לעבוד עליו מעל המספר הזה פשוט לא יעבוד.

עכשיו בשביל לשים עוגיה שתפעל לעוד הרבה זמן אני משתמש בPHP_INT_MAX בערך של הזמן - זה הערך הכי גבוה שאפשר לשים שם.

PHP_INT_MAX עם הפונקצייה mktime מגיע ל19 ינואר 2038.
מה שאומר שאחרי התאריך הזה לא יהיה אפשר יותר להשתמש בPHP בהרבה היבטים - לוחות שנה, עוגיות ועוד.

מה זה אומר? שמתי לב ש19 לינואר 2038 מופיע גם בדיונים על מייקרוסופט כמה פעמים.
זה אומר שעד 2038 יהיו חייבים להמציא נגלה חדשה של שפות תכנות?

בניה 26-06-07 20:48

הערך הזה הוא כזה כי זה הערך המקסימלי של משתנה של 32 BIT שיכול להכיל גם מספרים שליליים.
עד אז אני מקווה שיעשו איזה איפוס לפונקצית time וגם סביר להניח שאז המעבדים יהיו 64 BIT ולא תהיה בעיה להשתמש ב 64 BIT למשתנה(וכבר היום אין כ"כ בעיה למי שרוצה)

Mg-maor 26-06-07 21:00

חח אני זוכר שהיתה בעיה כזאת במשחק גינדיס עם כמות נשק שאפשר לקנות בכל מקרה פתרו את זה שם אז יכולים לפתור גם פה
ואני מאמין שבגרסה הבאה זה יפתר

psycho 26-06-07 21:00

זה כמו שיש תאריך ב1970 שקשור ליוניקס
פעם קראתי על זה והתעניינתי

אני כרגע אחרי הרבה זמן בלי שינה אז קשה לי לפרט.

Reality 26-06-07 21:00

אפשר להשתמש ב double לא? :x

4ior 26-06-07 21:13

אין שום סיבה שלא יאפסו את time()..

וגם כמו שבניה אמר, כנראה שיעברו עד אז ל64.

BlueNosE 26-06-07 21:17

ציטוט:

נכתב במקור על ידי psycho (פרסם 508032)
זה כמו שיש תאריך ב1970 שקשור ליוניקס
פעם קראתי על זה והתעניינתי

אני כרגע אחרי הרבה זמן בלי שינה אז קשה לי לפרט.

1970 זאת השנה שהמציאו את המנוע UNIX.. ובגלל זה time (val) מחושב בUNIX TIME - המרחק מהשנה בה יצרו את UNIX. אפשר לשים גם -3 ואז זה 3 שניות לפני שיצרו את יוניקס..

ציטוט:

הערך הזה הוא כזה כי זה הערך המקסימלי של משתנה של 32 BIT שיכול להכיל גם מספרים שליליים.
עד אז אני מקווה שיעשו איזה איפוס לפונקצית time וגם סביר להניח שאז המעבדים יהיו 64 BIT ולא תהיה בעיה להשתמש ב 64 BIT למשתנה(וכבר היום אין כ"כ בעיה למי שרוצה)
וואלה, לא ידעתי שזה הסיפור.
בכל מקרה אם עד אז יהיו בשוק רק מעבדי 64 ביט תיווצר בעיה חדשה, שבה התאריך המקסימלי הוא כפול מזה וכו' וכו'.. צריך להיות פתרון אבסולוטי לא?

ציטוט:

אפשר להשתמש ב double לא? :X
אין שום קשר, float point (נקודה צפה, גם DOUBLE) זה למספרים לא שלמים, זה לא מכפיל את המספר או משהו.

ציטוט:

נכתב במקור על ידי 4ior (פרסם 508052)
אין שום סיבה שלא יאפסו את time()..

וגם כמו שבניה אמר, כנראה שיעברו עד אז ל64.

אתה טועה, יש סיבה שלא יאפסו את TIME. צריכים את הערך הזה למערכות "ישנות" (המערכות שיש עכשיו).. אם יאפסו את TIME יהיה קשה מאוד לגרום לכל האתרים ברשת לעבור לTIME חדש. פשוט לא יעדכנו את המנוע.

בניה 26-06-07 21:45

נראה לי שאפשר לכתוב איזה משהו שידע לחשב מעל 32 BIT במעבדים 32 BIT רק שזה יהיה פחות יעיל.
אם אתה צריך את זה, אני בטוח שאפשר למצוא דברים בגוגל.
וגם תחשוב לכמה שנים 64BIT יספיק:-)

בקשר לאיפוס time, מה לעשות, לפעמים צריך לנטוש דברים ישנים שמגבילים.
ואם יעשו מעבר מדורג יהיה אפשר להפתר מזה בלי יותר מידי בעיות.

4ior 26-06-07 21:47

או פונקציה חדשה;)

Kfir.G 26-06-07 22:11

ציטוט:

נכתב במקור על ידי BlueNosE (פרסם 508007)
למי שלא יודע יש לPHP מספר (אינטיגר) מקסימלי בו היא תומכת.
המספר נמצא במשתנה PHP_INT_MAX ונכון לעכשיו הוא עומד על 2147483647.
כל מספר שתנסו לעבוד עליו מעל המספר הזה פשוט לא יעבוד.

עכשיו בשביל לשים עוגיה שתפעל לעוד הרבה זמן אני משתמש בPHP_INT_MAX בערך של הזמן - זה הערך הכי גבוה שאפשר לשים שם.

PHP_INT_MAX עם הפונקצייה mktime מגיע ל19 ינואר 2038.
מה שאומר שאחרי התאריך הזה לא יהיה אפשר יותר להשתמש בPHP בהרבה היבטים - לוחות שנה, עוגיות ועוד.

מה זה אומר? שמתי לב ש19 לינואר 2038 מופיע גם בדיונים על מייקרוסופט כמה פעמים.
זה אומר שעד 2038 יהיו חייבים להמציא נגלה חדשה של שפות תכנות?

טוב קודם כל נראה לי שכדאי שאני אסביר לך למה הגבול במשתנה שציינת הוא משהו כי נוצר לי הרושם שאתה לא מבין למה. מאחר ואתה פונה לdouble word כלומר ל32 סיביות או 4 בטים ואתה בוחר לפנות למספרים מסומנים כלומר חיובים ושלילים המספר מתקבל מהנוסחה הנ"ל
2^(n-1)-1
אם נציב במקום n את המספר 32 נקבל 2^31-1=2,147,483,648 ומכאן נובע שתחום המספרים הוא -2,147,483,648 עד 2,147,483,647. אני מקווה שעכשיו זה ברור ועכשיו אני אסביר לגבי ההמשך.

double word היא היחידה הגדולה ביותר שקיימת כיום (MB זה בערך מיליון בייטים, GB זה בערך מיליאד בייטים וכך הלאה). מה שזה אומר זה לא שלא יהיה אפשר להשתמש בשפות התכנות שקיימות היום גם מאוחר יותר אלא שיהיה צורך להרחיב את המשתנה שציינת ומאחר והמשתנה הזה הוא כבר בגודל הגדול ביותר שקיים יהיה צורך ליצור משתנה עזר שיעבוד יחד איתו כדי לחשב את הנתונים. דוגמה דומה לזה היא הכתובת המוחלטת שנוצרת במעבד משילוב של משתני הסיגמנטים וIP.

אני מצטער מאוד לשמוע שאתה מסוגל לתכנת בPHP ואינך יודע מה בעצם אתה עושה עם הפקודות הללו ואיך הם באמת עובדות במחשב שלך. אני ממליץ לך ללמוד קצת assembler. אין צורך להעמיק במיוחד אבל מאחר וassembler היא השפה הקרובה ביותר לשפת מכונה שקיימת היא תיתן לך מושג דיי ברור איך המחשב באמת עובד.

מקווה שהבנת :)

ציטוט:

נכתב במקור על ידי בניה (פרסם 508018)
הערך הזה הוא כזה כי זה הערך המקסימלי של משתנה של 32 BIT שיכול להכיל גם מספרים שליליים.
עד אז אני מקווה שיעשו איזה איפוס לפונקצית time וגם סביר להניח שאז המעבדים יהיו 64 BIT ולא תהיה בעיה להשתמש ב 64 BIT למשתנה(וכבר היום אין כ"כ בעיה למי שרוצה)

64 סיביות זה צירוף של שני double word אין יחידה כזאת. ולכן כדי שהמעבדים יתמכו בדבר כזה בפני עצמו יש לשנות את הדרך שבה עובד המחשב של ימינו (השיטה הבינארית) וזה אומר שיהיה צורך לכתוב כל שפת תכנות שקיימת מחדש ולכן לא נראה לי שמישהו יעשה דבר כזה.


כל הזמנים הם GMT +2. הזמן כעת הוא 21:33.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ