ארכיון הקטגוריה: אלגוריתמים

כל הביטים גדולים כקטנים

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

להמשיך לקרוא כל הביטים גדולים כקטנים

אופטימיזציה: האם אפשר להוציא את המיץ מהסוויץ'?

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

להמשיך לקרוא אופטימיזציה: האם אפשר להוציא את המיץ מהסוויץ'?

חיפוש מהיר של מיקומי GPS בקובץ

נתונה רשימה של קואורדינטות גאוגרפיות של נקודות ציון. הרשימה ארוכה מכדי לאחסן אותה בזיכרון המיקרו-בקר, ואנחנו צריכים לזהות בזמן אמת – על סמך מידע שמגיע ממודול GPS – אם אנחנו קרובים לאחת מנקודות הציון האלה. איך עושים זאת בצורה יעילה וחסכונית במשאבים?

המקום היחיד ש-GPS עובד בו (צילום מסך מתוך Google Earth)
המקום היחיד ש-GPS עובד בו (צילום מסך מתוך Google Earth)

להמשיך לקרוא חיפוש מהיר של מיקומי GPS בקובץ

איך יוצרים התפלגות נורמלית

פונקציות ה-random המוכרות נותנות לנו התפלגות אחידה של תוצאות. מה עושים אם צריך דווקא התפלגות בצורת פעמון, או בשמה המקצועי "התפלגות נורמלית"? הנה פתרון פשוט, היישר משיעורי המבוא לסטטיסטיקה.

התפלגות נורמלית שהופקה באמצעות תוכנה ב-BASIC
התפלגות נורמלית שהופקה באמצעות תוכנה ב-BASIC

להמשיך לקרוא איך יוצרים התפלגות נורמלית

איך ליצור מזהה ייחודי ייחודי

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

להמשיך לקרוא איך ליצור מזהה ייחודי ייחודי

פרויקט: חנוכיית לדים בשלט רחוק

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

חנוכייה בשלט רחוק, דגם 2016
חנוכייה בשלט רחוק, דגם 2016

להמשיך לקרוא פרויקט: חנוכיית לדים בשלט רחוק

קריאה מושלמת של Rotary Encoder, חלק ב'

האם אפשר לנסח אלגוריתם לקריאה של מקודד סיבובי, שפותר לגמרי את בעיית ה-Bounce מצד אחד, ומצד שני לא נופל בפח של היפוך כיוון הסיבוב כפי שקרה לאלגוריתם הקודם שלי?

מקודדים אופטיים מכניים
מקודדים אופטיים מכניים

להמשיך לקרוא קריאה מושלמת של Rotary Encoder, חלק ב'

איך ליצור שעון אקראי וגם מדויק

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

להמשיך לקרוא איך ליצור שעון אקראי וגם מדויק

מה מתמטיקה עוזרת בחיים

לפני כמה ימים נחת על שולחני ספר שרציתי לקרוא כבר הרבה מאד זמן: Hacker's Delight (מהדורה שניה). זהו למעשה אוסף של שיטות, טריקים וקונצים לאופטימיזציה של פעולות לוגיות ומתמטיות בתוכנות מחשב – מידע שימושי לכל מתכנת שעובד "קרוב לברזלים", ובמיוחד למתכנתי מיקרו-בקרים. הנה דוגמה לתועלת של טריקים חשבוניים… עוד לפני שקראתי דף אחד בספר.

טריקים למתכנתי Low-level: הספר Hacker's Delight
טריקים למתכנתי Low-level: הספר Hacker's Delight

להמשיך לקרוא מה מתמטיקה עוזרת בחיים

היקום הבלתי-אפשרי של Elite

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

פתיח המשחק Elite באמולטור המקוון bbc.godbolt.org
פתיח המשחק Elite באמולטור המקוון bbc.godbolt.org

להמשיך לקרוא היקום הבלתי-אפשרי של Elite