דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. מתמטיקה בשפת php לא נותן תוצאה רצויה

מתמטיקה בשפת php לא נותן תוצאה רצויה

מתוזמן נעוץ נעול הועבר תכנות
4 פוסטים 2 כותבים 260 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ה מנותק
    ה מנותק
    הלי
    כתב ב נערך לאחרונה על ידי
    #1

    שלום וברכה לכולם יש לי קוד php שמקבל מספר ומבצע עליו מספר חישובים מתמטיים
    אני אתן דוגמא נניח ושלחתי לו את המספר 752 אז בהתחלה אני לוקח את המספר (כל הפעולות נדרשות למהלך הקוד כמובן) ומחלק אותו במאה מבצע פעולות מסוימות מכפיל בעשר מבצע וכולי כדי להתייחס בנפרד למספרי העשרות אחדות מאות וכולי
    כדי שזה יצא טוב אז מה שאני עושה זה שלאחר החלוקה למאה אני משתמש בפונקציה floor על מנת לקבל את המספר הנמוך לדוגמא המספר הנ"ל לאחר חלוקה למאה יוצא 7.52 אז הפונקציה הנ"ל מחזירה את הערך 7 וכך אני עושה 7.52-7 ואת התוצאה כפול עשר
    מקווה שהייתי ברור עד עכשיו
    עכשיו עד כאן הכל טוב אבל נתקלתי בשני בעיות
    1 לאחר ששלחתי מספרים קשה לומר בוודאות איזה אבל יתכן שברוב הפעמים זה היה זוגי בזמן שהיה בעיה לא בטוח אז לפעמים אם אחרי כל הסיבוב יצא המספר 6 לדוגמא אז הפונקציה החזירה את הערך 5 וכך בעצם זה גם הפריע לחשבון וגם יצא אחד מיותר
    2 לפעמים אחרי ההפחתה לא יצא המספר המתאים לדוגמא אם יצא בסוף 7 והפונקציה החזירה 7 ובצעתי הפחתה של המספר הראשון בשני אז יצא לי את המספר הבא (הועתק מהדפדפן ואין לי מושג איך ) 8.8817841970013E-16
    כמובן שזה מאוד מוזר או שאם יצא המספר 5 אחרי הבעיה הקודמת שהזכרתי אז לאחר ההפחתה של 6 פחות 5 יצא לי את המספר הבא 0.99999999999998
    עד כאן הבעיה
    כמובן שזה מפריע לכל מהלך החישוב אז אם למישהו יש הסבר על הבעיה ו/או דרך איך לפתור אני ממש אודה לו
    ממש מתנצל על האריכות זה פשוט היה כדי להסביר הכי טוב שיכולתי ולמנוע מצב שאנשים רוצים לעזור ולא מצליחים
    מקווה שהייתי ברור מספיק אם לא אשמח לענות
    תודה רבה רבה

    אם אתה מאמין שאתה יכול לקלקל תאמין שאתה יכול לתקן

    תגובה 1 תגובה אחרונה
    2
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      כתב ב נערך לאחרונה על ידי
      #2

      זה קורה כי בPHP כל המספרים הם מסוג "מספר צף", שזה מספר עם דיוק מוגבל.
      (תוכל לקרוא על זה פה: https://www.hamichlol.org.il/נקודה_צפה).

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

       echo bcsub(mispar, misparFloor, 20);
      

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      ה תגובה 1 תגובה אחרונה
      5
      • ה מנותק
        ה מנותק
        הלי
        השיב לdovid ב נערך לאחרונה על ידי
        #3

        @dovid לא תייגת אותי אז לא קבלתי התראה במייל
        הרעיון שלך גאוני
        קודם כל נהנתי מעצם הגדרת הבעיה דבר שאני לא הצלחתי לעשות למרות שהצלחתי להסביר את הבעיה
        עשיתי את זה עכשיו יש לי שתי שאלות
        אחד אני מבין שזה יותר מקצועי אבל למה זה עדיף על פני הרעיון האחר המובא שם של פיצול לפי נקודה?
        שתיים איך אוכל לוודא באמת שזה כבר לא יקרה שוב ואסביר את השאלה את הבעיה הזאת גיליתי באקראי כי זה לא קורה לכל המספרים (עברתי על הקישור שהבאת הבנתי בערך את הבסיס אצטרך לעבור שוב אבל לא ממש הבנתי למה זה לא קורה לכל המספרים) רק במהלך בדיקות שבצעתי הרצתי מספרים שונים ובדיוק יצא מספר לא תקין ניסיתי מספרים דומים וישבתי הרבה זמן עד שגילית את המקום ששם מתחילים הבעיות (כמובן בלי להבין למה עד שהארת את עיני ) אז עכשיו לא ניסיתי את כל המספרים האפשריים במקרה שלי אז מי אמר שזה לא יקרה במספרים אחרים (אני כתבתי כמו שהבאת שהגדרת הדיוק תהיה 20) ?
        תודה רבה רבה על המענה המהיר וההסבר המדויק והקישורים הנלווים

        אם אתה מאמין שאתה יכול לקלקל תאמין שאתה יכול לתקן

        תגובה 1 תגובה אחרונה
        0
        • dovidD מנותק
          dovidD מנותק
          dovid ניהול
          כתב ב נערך לאחרונה על ידי
          #4

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

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

          בכל נושא אפשר ליצור קשר dovid@tchumim.com

          תגובה 1 תגובה אחרונה
          1

          בא תתחבר לדף היומי!
          • התחברות

          • אין לך חשבון עדיין? הרשמה

          • התחברו או הירשמו כדי לחפש.
          • פוסט ראשון
            פוסט אחרון
          0
          • דף הבית
          • קטגוריות
          • פוסטים אחרונים
          • משתמשים
          • חיפוש
          • חוקי הפורום