![]() |
[PHP] משהו שחשבתי עליו..
למי שלא יודע יש לPHP מספר (אינטיגר) מקסימלי בו היא תומכת.
המספר נמצא במשתנה PHP_INT_MAX ונכון לעכשיו הוא עומד על 2147483647. כל מספר שתנסו לעבוד עליו מעל המספר הזה פשוט לא יעבוד. עכשיו בשביל לשים עוגיה שתפעל לעוד הרבה זמן אני משתמש בPHP_INT_MAX בערך של הזמן - זה הערך הכי גבוה שאפשר לשים שם. PHP_INT_MAX עם הפונקצייה mktime מגיע ל19 ינואר 2038. מה שאומר שאחרי התאריך הזה לא יהיה אפשר יותר להשתמש בPHP בהרבה היבטים - לוחות שנה, עוגיות ועוד. מה זה אומר? שמתי לב ש19 לינואר 2038 מופיע גם בדיונים על מייקרוסופט כמה פעמים. זה אומר שעד 2038 יהיו חייבים להמציא נגלה חדשה של שפות תכנות? |
הערך הזה הוא כזה כי זה הערך המקסימלי של משתנה של 32 BIT שיכול להכיל גם מספרים שליליים.
עד אז אני מקווה שיעשו איזה איפוס לפונקצית time וגם סביר להניח שאז המעבדים יהיו 64 BIT ולא תהיה בעיה להשתמש ב 64 BIT למשתנה(וכבר היום אין כ"כ בעיה למי שרוצה) |
חח אני זוכר שהיתה בעיה כזאת במשחק גינדיס עם כמות נשק שאפשר לקנות בכל מקרה פתרו את זה שם אז יכולים לפתור גם פה
ואני מאמין שבגרסה הבאה זה יפתר |
זה כמו שיש תאריך ב1970 שקשור ליוניקס
פעם קראתי על זה והתעניינתי אני כרגע אחרי הרבה זמן בלי שינה אז קשה לי לפרט. |
אפשר להשתמש ב double לא? :x
|
אין שום סיבה שלא יאפסו את time()..
וגם כמו שבניה אמר, כנראה שיעברו עד אז ל64. |
ציטוט:
ציטוט:
בכל מקרה אם עד אז יהיו בשוק רק מעבדי 64 ביט תיווצר בעיה חדשה, שבה התאריך המקסימלי הוא כפול מזה וכו' וכו'.. צריך להיות פתרון אבסולוטי לא? ציטוט:
ציטוט:
|
נראה לי שאפשר לכתוב איזה משהו שידע לחשב מעל 32 BIT במעבדים 32 BIT רק שזה יהיה פחות יעיל.
אם אתה צריך את זה, אני בטוח שאפשר למצוא דברים בגוגל. וגם תחשוב לכמה שנים 64BIT יספיק:-) בקשר לאיפוס time, מה לעשות, לפעמים צריך לנטוש דברים ישנים שמגבילים. ואם יעשו מעבר מדורג יהיה אפשר להפתר מזה בלי יותר מידי בעיות. |
או פונקציה חדשה;)
|
ציטוט:
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 היא השפה הקרובה ביותר לשפת מכונה שקיימת היא תיתן לך מושג דיי ברור איך המחשב באמת עובד. מקווה שהבנת :) ציטוט:
|
אפשר להיות מתכנת PHP מאוד טוב גם בלי לדעת את הדברים הללו.
ויכול להיות מישהו שהוא ויקיפדיה מהלכת אבל מתכנת גרוע. אני דווקא שמח שגם מי שלא יודע איך המחשב עובד יכול להשתמש בו ובPHP, זה גם מה שיוצרי הPHP אומרים, שהיא אמורה להיות קלה לשימוש. מה שכן, מעניין אותי לדעת למה אי אפשר לחשב משתנה יותר גדול מ4 בייט, אני לא יודע איך בדיוק המעבד פועל, אבל אני לא מבין מה ההבדל בין לבצע פעולה על סיבית 1 או על 64. |
ציטוט:
בקשר להבדל בין לבצע פעולה על סיבית אחת או על 64 זה פשוט הדרך שבה השיטה הבינארית עובדת. השיטה הבינארית זה בעצם סימונים של 0 1 שיוצרים פקודות. עכשיו במעבד עצמו בכל מקום שכתוב 0 אין זרם ובכל מקום שיש 1 יש זרם וככה המעבד יודע לבצע פעולות שונות ומגוונות. כאשר פיתחו את השיטה הבינארית לא חשבו שיהיה צורך במספרים כל כך גדולים ולכן יצרו את הגודל המקסימלי עבור יחידת מסויימת כ32 סיביות. המעבד לא יכול להבדיל לפי רצף של 0 ו1 (זרם וחוסר זרם) אם אתה מתכוון למספר, פקודה או כל דבר אחר ולכן הוא עובד לפי סדר המקום של הסיביות. כך שיוצא שאם אתה תכניס למעבד 64 סיביות הוא לא ידע איך להתמודד עם זה ויחשיב את זה כמספר דברים שונים => זה לא יעבוד. וד"א אני לא ויקיפדיה מהלכת ;P פשוט הייתה לי בגרות על זה השנה אז אני יודע :) |
נו אז מה זה מעבד 64 סביות? שהערכת פקודות שלו שונה.
היו פעם מעבדים של פחות מ32 סביות והגדילו את זה ל32 בלי יותר מידי בעיות. |
ציטוט:
|
ציטוט:
1. תודה רבה לך על ההסבר המקיף. אני חושב שזה לא יותר מידע כללי למתכנת WEB בלבד, אבל בכל זאת תודה. 2. חבל לי לשמוע שאתה עושה את ההכללות האלו ומחליט שמתכנת PHP שלא יודע כיצד עובד מעבד הוא מתכנת פחות טוב. אבל אחד לא אמר שאני צריך לדעת את זה, ובכל זאת בגלל שזה נושא שעניין אותי פתחתי נושא. 3. אין לי מה ללמוד אסמבלי כל עוד אני נשאר בWEB, אם אני אחליט לעבור לתכנות אפליקציות לא רק ברשת אני אלמד את הנושא. 4. אני מתאר לעצמי שמעבדים שלא מבוססים על בינארים יעבדו הרבה יותר מהר מהמעבדים היום, ולכן מהלך כזה הוא הכרחי בשלב מסויים. |
אם אתה אומר שאתה יודע אני לא אתוכח איתך.
בחזרה לנושא האשכול, יש int שיותר גדול מ 32 סביות, ככה שזה לא בעיה פטאלית. |
ציטוט:
|
ציטוט:
וד"א לכל אלה ממכם שתהו אני עוד לא יודע PHP רק ראיתי שיש שאלה שאני יכול לענות עליה אז עניתי. אם כבר יש דרך בPHP לפנות ליחידה של 64 סיביות (כלומר שילוב של שני double word) אז שישתמשו בה בכיף אני בסך הכל ניסיתי לענות על השאלה עם הכלים שיש לי. ציטוט:
3. יש לך סיבה -> ידע כללי :) 4. איך תשמש במשהו שלא יעבוד על השיטה הבינארית? אם זה היה כל כך קל היו כבר מחליפים שיטה כי השיטה הנוכחית דיי מסורבלת. בסיס בינארי - בסיס 2 - 0,1 שזה בדיוק המצבים שיש במעבד מעבר זרם ואי מעבר זרם איך ישנו את זה... אולי אם רמות שונות של זרמים אבל אז יקח למעבד הרבה יותר זמן לפענח כל פקודה והאפקטיביות שלו תרד משמעותית. |
אז...
יש כמה אפשרויות, אני לא כל כך מומחה בעניין, אבל אמרתם שאי אפשר לחשב מספר שגדול מ-2,147,483,648. אז מה הבעייה לעשות פונקציה שבודקת, האם המספר גדול מ-2,147,483,648, אם כן-אז היא מחלק אותו לשתיים(או לכמה שצריך, עד שזה יספיק, זה כבר עבודה שלכם P: ), ונגיד צריך להוסיף 2? אז היא מחלקת את 2 במספר החלקים, ומוסיפה לכל חלק את הפלט. או, שפשוט יהיה מערך אחד לכל מספר שגדול מ-2,147,483,648, שישמור את האחדות, עשרות, ומאות, אחד לאלפים, רבבות, ומאות אלפים, וכו' וכו' וכו'. |
ציטוט:
יש לך שגיאה שוב. אתה לא יכול לעבוד עם מספר שיותר גדול מזה - נדמה לי שזה תופס גם למספר תווים (מעל 2,147,483,648 תווים יש שגיאה).. |
תראה מה קרה ואיזו התפתחות טכנולוגיות חלו ב 30 שנה האחרונות, אז עוד 30 שנה? מה אתה דואג.
|
PHP טיפל אצלי(מעבד 32 BIT) במספר 39 BIT.
קוד:
$a = pow(2,39); |
ציטוט:
אגב, עומר... לך לדף של הפונקציה MKTIME תחפש שם בתגובות את המספר 2038, יש שם פתרונות לזה. בכל זאת, עד 2038 עוד יהיו מספיק גרסאות לPHP, אל תדאג...הם ישנו את הפונקציות שלא יחזירו INT אלא לכמו שPOW למשל מחזיר. העולם כבר לא ידע מזה PHP4 בכלל, כמו שהיום די קשה למצוא שרת על PHP3... |
ציטוט:
PHP קוד:
3.428827543E+302 אז בשרת שלי יש 1005 ביט ;P |
התכוונתי שזה החזיר לי מספר בצורה לא של FLOAT.
ציטוט:
|
ציטוט:
מה שהמפתחים צריכים לעשות, זה לשנות את הגדרת הפונקציה, אין מה לעשות. |
INT זה לא אומר כמה בייטים המספר, זה אומר רק שהמספר הוא שלם.
בפסקל שאני למדתי זה היה 16 BIT. בPHP זה 32 אבל אפשר לקרוא לכל מספר שלם integer. |
ציטוט:
בכל זאת. אני סומך על המפתחים שיפתרו את זה...עד שנת 2038. |
מה יש לכם דאגות?
חחח עד שנת 2038 ימציאו הרבה דברים חדשים.. |
| כל הזמנים הם GMT +2. הזמן כעת הוא 01:47. |
מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ