ในภาษาที่ไม่อนุญาตขีดล่างในค่าคงที่จำนวนเต็มเป็นวิธีปฏิบัติที่ดีในการสร้างค่าคงที่ 1 พันล้านหรือไม่


39

ในภาษาที่ไม่อนุญาตขีดล่างเป็นตัวอักษรจำนวนเต็มคุณควรสร้างค่าคงที่ 1 พันล้านหรือไม่ เช่นใน C ++:

size_t ONE_BILLION = 1000000000;

แน่นอนว่าเราไม่ควรสร้างค่าคงที่สำหรับตัวเลขขนาดเล็กเช่น 100 แต่ด้วยค่าศูนย์ 9 มันเป็นเรื่องง่ายที่จะละทิ้งศูนย์หรือเพิ่มรหัสพิเศษในโค้ดดังนี้:

tv_sec = timeInNanosec / 1000000000;
tv_nsec = timeInNanosec % 1000000000;

24
ผมหวังว่าทุกคนที่นี่ลงคะแนนให้NO ด้วยวิธีนี้บางทีวันหนึ่งธนาคารของฉันจะโอนเงินหนึ่งพันล้านดอลลาร์ไปยังบัญชีของฉันเพราะโปรแกรมเมอร์ไม่ได้ใช้ศูนย์คงที่และหายไป! :)
ซ้ำ

43
ทำไมไม่สร้างค่าคงที่สำหรับจำนวนน้อย? 100 หมายความว่าอย่างไร เว้นแต่จะมีบริบทบางอย่างมันเป็นเลขอาถรรพ์
อัลลัน

4
@MathewFoscarini โดยทั่วไปแล้วความผิดพลาดสามารถไปได้ทั้งทาง แต่เมื่อพูดถึงธนาคารของคุณความผิดพลาดมักจะเกิดขึ้นกับคุณ
เอมอรี

23
พิจารณาการเขียน1e9, 10^9หรือ1_000_000_000ถ้าภาษาที่คุณกำลังใช้สนับสนุน
hammar

คำตอบ:


33

ภาษาส่วนใหญ่มีสัญกรณ์แบบเอ็กซ์โพเนนเชียล หนึ่งล้านคือ1e6(หมายถึง 1 คูณ 10 ต่อกำลังของ 6) วิธีนี้แก้ปัญหาได้ดีกว่าข้อเสนอส่วนใหญ่ที่นี่

ในภาษาที่มีลักษณะคล้าย C จำนวนมากสัญกรณ์ทางวิทยาศาสตร์ได้กำหนดประเภทจุดลอยตัวซึ่งเป็นโชคร้ายหากคุณต้องการใช้ int อย่างไรก็ตามคุณสามารถพิมพ์ค่าคงที่นั้นเพื่อหลีกเลี่ยงการแปลงโดยนัยในสูตรของคุณ

n / int(1e9) จะหารด้วยพันล้าน

ในตัวอย่างของคุณเกี่ยวกับปริมาณทางกายภาพ (เวลาเป็นเสี้ยววินาที) โดยทั่วไปฉันจะถามตัวเองว่าจำนวนเต็มเป็นประเภทที่ถูกต้องหรือไม่ ในความเป็นจริงแล้วจุดลอยตัวdoubleอาจเหมาะสมกว่าเมื่อจัดการกับปริมาณที่วัดได้ (แม้ว่าจะมีบางกรณีที่คุณต้องการlong long)


6
ฉันคิดว่าวิธีแก้ปัญหา NANOSECONDS_IN_ONE_SECOND นั้นชัดเจนและมากขึ้น
Thomas Bonini

1
คำถามเกี่ยวกับเสรีนิยมจำนวนเต็มและฉันเสนอให้ใช้สัญกรณ์ทางวิทยาศาสตร์ ไม่ว่าจะทำเช่นนี้ในสถานที่หรือโดยการกำหนดค่าคงที่เป็นปัญหาของรหัสโครงสร้างที่ไม่ได้ถามในคำถาม การกำหนดค่าคงที่จะเพิ่มสิ่งที่เป็นนามธรรมอย่าง จำกัด ฉันจะเขียนฟังก์ชันการแปลง / มาโครเพื่อให้ได้นามธรรมที่ดีกว่า
wirrbel

1
การคัดเลือกนักแสดงที่มีขนาดใหญ่มากถึงผู้ที่ไม่เสี่ยงต่อปัญหาความแตกต่างในการปัดเศษเลขทศนิยม
ฟิลิปป์

ด้วยประเภทจำนวนเต็มความแม่นยำปกติสิ่งนี้ไม่น่าจะเป็นปัญหาตราบใดที่คุณใช้การแปลงความแม่นยำสองเท่าเพื่อแปลง คุณถูกต้องเมื่อใช้ค่าของlong longช่วง
wirrbel

145

สร้างหนึ่งชื่อ NANOSECONDS_IN_ONE_SECOND แทนที่จะเป็นชื่อ

หรือชื่อที่สั้นกว่าและดีกว่าถ้าคุณคิดได้


58
ฉันพูดNanoseconds_Per_Secondแต่นี่คือความเห็นของฉันคำตอบที่ถูกต้อง
KChaloux

8
@Mathew ฉันไม่ได้รับคะแนนของคุณ ไม่มีอะไรผิดปกติกับการพูดมิลลิเมตรต่อเมตร คุณอาจจะหมายถึงว่ามันซ้ำซ้อนในเสี้ยววินาทีนั้นหมายถึงเศษส่วนหนึ่งพันล้านเสี้ยววินาที แต่ก็ไม่มีอะไรผิดปกติในการระบุอีกครั้ง มันเหมือนกับการบอกว่า 1 + 1 = 2. "x ต่อ y" ยังคงมีเหตุผลมากขึ้นเมื่อ x และ y ไม่ปะติดปะต่อเช่น "หน่วยต่อครึ่งโหล" หรือ "nanoseconds ต่อมิลลิวินาที"
Mark Canlas

7
@MathewFoscarini จริง ๆ แล้วไม่ในบริบทนี้มันไม่ใช่ ถ้าเป็นเช่นนั้นชื่อคงที่NANOSECONDSนั้นไม่มีความหมายเนื่องจากคุณไม่สามารถบอกได้ว่าควรใช้กับอะไร ในทำนองเดียวกันNANOSECONDS_PER_MICROSECONDเป็นค่าคงที่ที่ถูกต้องคล้ายกันที่ทำให้รู้สึก
Izkata

5
@MathewFoscarini "มิลลิเมตรต่อเมตร" เป็นวิธีการลบหน่วยในการแปลงเพื่อรับค่าดิบ 1mm/1m = 1000ซึ่งเป็นตรงจุดของสิ่งที่กำลังทำที่นี่
zzzzBov

11
ทำไมต้องพิมพ์เยอะ? NS_PER_SECควรชัดเจนกับทุกคนที่ควรจะจัดการกับ nanoseconds
Rex Kerr

67

ค่าคงที่มีไว้เพื่อให้ความหมายตัวเลข ไม่มีความหมายใด ๆ เพิ่มเติมในการที่จะONE_BILLION 1000000000ที่จริงแล้วมันทำให้เกิดความสับสนมากขึ้นเพราะในภาษาธรรมชาติที่แตกต่างกันพันล้านหมายถึงสิ่งที่แตกต่าง (ทั้งพันล้านหรือล้านล้าน)! 1e9หากคุณต้องการที่จะเขียนมันสั้นมีโอกาสที่ดีในการเขียนโปรแกรมภาษาของคุณช่วยให้การใช้สัญกรณ์วิทยาศาสตร์คือ มิฉะนั้นฉันเห็นด้วยกับ @JohnB ว่าตัวเลขนี้หมายถึงจำนวนนาโนวินาทีในวินาทีดังนั้นตั้งชื่อมันว่า


9
ชี้ให้เห็นว่าพันล้านในภาษาที่แตกต่างกันหมายถึงจำนวนศูนย์
Frozenkoi

3
จะแนะนำให้เปลี่ยนภาษาปกติเป็นภาษาธรรมชาติ ปกติหมายถึงอย่างอื่น ...
jk

การตีความที่แตกต่างกันของ "พันล้าน" ในภาษาดังกล่าวเป็นจุดที่ดี! ทำไมฉันไม่สามารถโหวตคำตอบของคุณสองครั้งได้!
DSF

3
คุณไม่ต้องการภาษาอื่น คุณไม่ต้องการประเทศอื่นด้วยซ้ำ ในภาษาอังกฤษแบบอังกฤษ "พันล้าน" หมายถึงบางสิ่งที่แตกต่างก่อนและหลังปี 1974 ในการสื่อสารอย่างเป็นทางการ (สื่อมวลชนและรัฐบาล) และการใช้งานทั้งสองยังคงมีอยู่
Jörg W Mittag

1
" ไม่มีความหมายเพิ่มเติมใด ๆ ใน ONE_BILLION ถึง 10000000000.ฉันไม่เห็นด้วย (คำแนะนำ: ฉันจงใจผิดคุณและเพิ่มอีกศูนย์; จะได้สังเกตเห็นถ้าฉันไม่ได้พูดถึงมัน?)
Keith Thompson

27

สำหรับประเพณีหนึ่งหรือสองฉันจะใช้การประชุม:

tv_sec = timeInNanosec / (1000 * 1000 * 1000);
tv_nsec = timeInNanosec % (1000 * 1000 * 1000);

มันอธิบายตนเองได้อย่างสมบูรณ์ถูกรวบรวมเป็นค่าคงที่และยากที่จะพลาด

นอกจากนี้ยังมีประโยชน์อย่างมากในกรณีเช่น:

var Time = 24 * 60 * 60;

เราเห็นว่าเรากำลังพูดถึงหนึ่งวันในไม่กี่วินาที


นี่คือสิ่งที่ฉันมักจะทำ นอกจากนี้ยังมีข้อได้เปรียบที่ฉันจะไม่ลืมว่าฉันกำหนด NANOSECONDS_IN_ONE_SECOND เมื่อวานนี้และกำหนด NANOSECONDS_PER_SECOND วันนี้ และอาจจะ ONE_AMERICAN_BILLION ในวันพรุ่งนี้
โทมัส Padron-McCarthy

แน่นอน 'SecondsInOneDay = 24 * 60 * 60' นั้นง่ายกว่าไหม?
JBRWilkinson

@JBRWilkinson แน่ใจว่าข้อมูลโค้ดเริ่มต้นของฉันใช้คลาสinstance.Time = ...แต่จากนั้นฉันก็ทำมันลง ...
Sklivvz

3
ใน C หรือ C ++ (1000 * 1000 * 1000)เป็นชนิดintซึ่งจำเป็นต้องเป็น 16 บิตเท่านั้นดังนั้นจึงสามารถล้นได้ คุณสามารถเขียน(1000L * 1000L * 1000L)เพื่อหลีกเลี่ยงการที่
Keith Thompson

ฉันทำสิ่งนี้มาก มันใช้งานได้ดีมาก
vy32

10

ความยาวของค่าไม่ใช่สิ่งที่กำหนดว่าต้องการค่าคงที่หรือไม่

คุณใช้ค่าคงที่เพื่อหลีกเลี่ยงตัวเลขเวทย์มนตร์ไม่ใช่เพื่อหลีกเลี่ยงการพิมพ์

ตัวอย่างเช่นค่าคงที่ที่ถูกต้อง:

public static final int CLOSE_CURSORS_AT_COMMIT = 1;
public static final int CONCUR_READ_ONLY = 2;
public static final int CONCUR_UPDATABLE = 3;
public static final int FETCH_FORWARD = 4;
public static final int FETCH_REVERSE = 5; 
public static final int FETCH_UNKNOWN = 6;
public static final int HOLD_CURSORS_OVER_COMMIT = 7;
public static final int TYPE_FORWARD_ONLY = 8;
public static final int TYPE_SCROLL_INSENSITIVE = 9;
public static final int TYPE_SCROLL_SENSITIVE = 10;

ใช้:

public static final int NANOSECS_PER_SECOND = 1000000000;

(ตัวอย่างโค้ดอยู่ใน Java แปลเป็นภาษาที่คุณชื่นชอบ)


3
+1 ชื่อที่มีชื่อนั้นแทบจะไร้ประโยชน์ จุดประสงค์ของการหาค่าคงที่เพื่อให้ความหมายกับตัวเลขเหล่านั้น พวกเขาเป็นตัวแทนอะไร สิ่งที่พวกเขากำลังนับหรือ จำกัด หรือชื่อสัมประสิทธิ์อย่างเป็นทางการ? ไม่ใช่มูลค่าของการนับ
JustinC

5
เมื่อเห็นว่าเรากำลังพูดถึง Java ฉันจะสังเกตว่าใน Java 7 เราสามารถใส่เครื่องหมายขีดล่างเพื่อช่วยให้อ่านง่าย!
Nick

2
นี่เป็นตัวอย่างที่น่ากลัวของค่าคงที่ที่ใช้ได้ พวกเขาควรได้รับ enums เว้นแต่พวกเขาถูกสร้างขึ้นก่อนที่จะ enums
Christoffer Hammarström

@ ChristofferHammarströmพวกเขาถูกสร้างขึ้นจริงก่อนที่จะ enums พวกเขาเป็นส่วนหนึ่งของคลาส ResultSet ในแพคเกจ SQL ของ Java SDK
Tulains Córdova

2
@ ChristofferHammarströmพวกเขาไม่ดีเพราะตอนนี้เรามีจำนวนมาก แต่ไม่ใช่เพราะความไม่ย่อท้อ Enum ไม่มีอยู่เมื่อสร้างคลาสเหล่านี้และเพื่อแยกความแตกต่างระหว่างตัวเลือกเอกสิทธิ์เฉพาะบุคคลเช่น FETCH_FORWARD และ FETCH_REVERSE ให้ค่าที่ต่างกัน คุณค่าไม่สำคัญเพียงแค่ความจริงที่ว่าพวกเขาแตกต่างกัน
Tulains Córdova

8

อเมริกันหรือยุโรปพันล้าน

(หรือในด้านเทคนิคหนึ่งพันล้านในระยะสั้นหรือยาว - หนึ่งคือ 1,000 ล้านและอีกหนึ่งล้านล้าน)

ด้วยความสับสนนี้จากนั้นฉันก็บอกว่าใช่ - มันสมเหตุสมผลแล้วที่จะนิยามมันอีกครั้งและเก็บไว้กับมันเช่นเดียวกันกับค่าคงที่ใด ๆ ที่คุณต้องเห็นด้วยกับคำนิยามบน


17
"ชาวอเมริกันหรือชาวยุโรปพันล้าน?" - "อะไรนะฉันไม่รู้เหมือนกัน! Ahhhhh !!!!"
Tesserex

อย่างน้อยในสหราชอาณาจักรเราใช้มาตั้งแต่ 1e9 พันล้านเหรียญ
Jack Aidley

1
@Tesserex - คุณต้องรู้สิ่งเหล่านี้เมื่อคุณเป็นราชาคุณรู้
gbjbaanb

5

เหตุผลที่ไม่ควร

ประการแรกนี่คือเหตุผลที่ไม่เขียนขีดล่างหรือใช้เคล็ดลับใด ๆ ในการจำลองมันทำให้ค่าคงที่ยากต่อการค้นหาในรหัส สมมติว่ามีบางโปรแกรมจัดแสดงบางส่วนในการดำเนินงานของมูลค่า 1,500,000 รหัสยากสำหรับพารามิเตอร์บางอย่าง ฉันต้องการที่จะรู้ว่าสิ่งที่เกิดขึ้นในซอร์สโค้ดของโปรแกรมนั้นจริงดังนั้นฉันจึง grep รหัสสำหรับ1500000และหาอะไร ทำไม? อาจเป็นเลขฐานสิบหก (แต่ทำไมตัวเลขทศนิยมกลมเช่นนี้) 1_500_000ถิ่นที่ฉันคงถูกเขียนเป็นจริง ผมจำเป็นต้อง 1_?500_?000regex

แนะนำตัวละครในความคิดเห็น

เพียงเพราะ Visual Aid ประเภทหนึ่งไม่พร้อมใช้งานหรือเราไม่ต้องการใช้ด้วยเหตุผลดังกล่าวข้างต้นไม่ได้หมายความว่าเราไม่สามารถใช้ประโยชน์จากไฟล์ข้อความสองมิติเพื่อสร้างเครื่องช่วยมองเห็นทางเลือก:

foo = bar / 1000000000;
//           --^--^--^  

ด้วยวิธีนี้เราสามารถโน้มน้าวตัวเองได้อย่างง่ายดายว่ามีสามกลุ่มสามศูนย์ ถึงกระนั้นเรายังสามารถ grep ซอร์สโค้ด1000000000และค้นหาได้

การระบายสีไวยากรณ์

เท็กซ์เอดิเตอร์พร้อมการกำหนดสีไวยากรณ์ที่สามารถตั้งโปรแกรมสามารถทำกับกลุ่มสีหลักในค่าคงที่ตัวเลขที่มีสีสลับเพื่อให้อ่านง่ายขึ้น เราไม่ต้องทำอะไรในรหัส

การประมวลผลล่วงหน้า: C, C ++, Objective C

ตอนนี้ถ้าเราต้องการเครื่องหมายจุลภาคระหว่างตัวเลขใน C และ C ++ เราสามารถใช้การประมวลผลล่วงหน้า:

/* Four digit base TH-ousand constant macro */
/* Condensed using Horner's rule */
#define TH(A,B,C,D) ((((((A) * 1000) + (B)) * 1000) + (C)) * 1000 + D)

tv_sec = nanoseconds / TH(1,000,000,000)

TH(1,234,567,890)การทำงานสำหรับตัวเลขเช่น

แมโครที่คล้ายกับ TH สามารถทำงานกับการวางโทเค็นได้มากกว่าการคำนวณ ในตัวประมวลผลล่วงหน้า C ตัว##ดำเนินการไบนารี("โทเค็นแปะ") สามารถใช้ในเนื้อความมาโครเพื่อวางตัวถูกดำเนินการสองตัวเข้าด้วยกันในโทเค็นเดียว ตัวถูกดำเนินการหนึ่งหรือทั้งคู่สามารถเป็นอาร์กิวเมนต์ของแมโครได้ ข้อเสียที่นี่ (สร้างความเสี่ยงสำหรับเรา) คือหากการทำให้เกิดผลไม่ได้เป็นโทเค็นที่ถูกต้องพฤติกรรมจะไม่ได้กำหนด

#define TOK4(A, B, C, D) A ## B ## C ## D

ตอนนี้

TOK4(1,000,000,000)       /* produces the single token 1000000000 */
TOK4(1,123,000,000.0E+2)  /* produces the single token 1123000000.0E+2 */
TOK4(pr,in,t,f)           /* produces the token printf */
TOK4(#,*,a,b)             /* undefined behavior, #*ab is not valid token syntax */

โปรแกรม C ที่วางตัวระบุร่วมกันและใช้ผลลัพธ์เพื่อตั้งชื่อตัวแปรส่วนกลางและฟังก์ชันที่มีอยู่และน่ากลัวที่จะทำงานด้วยเพราะไม่สามารถใช้เครื่องมือเช่น GNU id-utils และ ctags


2
+1 สำหรับหนึ่งในการละเมิดที่ดีที่สุดของ preprocessor ที่ฉันเคยเห็น แม้ว่าฉันจะไปกับ NSEC_PER_SEC หรือบางอย่างในการผลิตแม้ว่า
วิกเตอร์

เกือบ -1 สำหรับการใช้ preprocessor ที่ไม่เหมาะสม :)
CVn

3

ใช่ฟังดูเหมือนความคิดที่สมเหตุสมผล ข้อผิดพลาด DIGIT แบบ Off-by-One นั้นเลวร้ายยิ่งกว่าข้อผิดพลาดแบบ off-by-one ที่น่าอับอาย แม้ว่ามันอาจสร้างความสับสนให้คนอื่น (รวมถึงตัวคุณในอนาคต) เพื่ออ่านรหัส

ชื่อที่อธิบายเพิ่มเติมเช่น NANOSEC_PER_SEC นั้นดูดีเพราะจะช่วยเพิ่มความชัดเจนในการใช้งานได้ตลอดเวลา อย่างไรก็ตามมันไม่มีเหตุผลที่จะใช้ในบริบทอื่นนอกเหนือจากเวลาและมันจะเป็นไปไม่ได้ที่จะสร้างแยก 1,000,000,000 สำหรับทุกสถานการณ์

สิ่งที่คุณต้องการทำอย่างโง่ ๆ อย่างที่เห็นในตอนแรกคือ 'หารด้วยวินาที' สิ่งนี้ออกจาก NANO_PER ซึ่งไม่เพียง แต่เป็นภาษาอิสระ (10 ^ 9 ในอเมริกาและยุโรป) แต่ยังเป็นสถานการณ์ที่ไม่ขึ้นอยู่กับสถานการณ์ (ไม่ จำกัด หน่วย) และสามารถพิมพ์และอ่านได้ง่าย


โพสต์นี้ค่อนข้างอ่านยาก (ผนังข้อความ) คุณจะช่วยแก้ไขมันให้เป็นรูปร่างที่ดีขึ้นได้ไหม
ริ้น

3

โดยทั่วไปเป็นความคิดที่ดีที่จะใช้ค่าคงที่สเกลาร์สำหรับการแปลงหน่วยและหากคุณพบว่าตัวเองยังคงมีค่าคงที่สำหรับสิ่งต่าง ๆ ที่คุณกำลังทำอยู่ในหลาย ๆ แปลง

เมื่อคุณมีปริมาณหนึ่งหน่วย (พูดคือ 10 วินาที) และต้องการแปลงเป็นหน่วยอื่น (เช่นนาโนวินาที) นี่เป็นเวลาที่จะใช้ระบบประเภทของภาษาของคุณเพื่อให้แน่ใจว่าหน่วยจะถูกปรับขนาดตามที่คุณต้องการ

ทำให้การทำงานของคุณจะใช้Nanosecondsพารามิเตอร์และให้ผู้ประกอบการแปลงและ / หรือการก่อสร้างงานในชั้นเรียนว่าสำหรับSeconds, Minutesหรือสิ่งที่มีคุณ นี่คือที่ของคุณconst intหรือ#defineหรือ1e9เห็นในคำตอบอื่น ๆ

วิธีนี้จะหลีกเลี่ยงการมีตัวแปรของหน่วยที่ไม่ชัดเจนซึ่งลอยอยู่รอบ ๆ โค้ดของคุณ และป้องกันมิให้มีข้อบกพร่องทั้งหมดจากจุดที่มีการใช้การคูณ / หารที่ไม่ถูกต้องหรือถูกนำไปใช้แล้วหรือปริมาณนั้นเป็นระยะทางแทนเวลาหรือ ...

นอกจากนี้ในคลาสดังกล่าวเป็นสิ่งที่ดีที่จะสร้างจากสเกลาร์ส่วนตัวแบบส่วนตัวและใช้ "MakeSeconds (int)" แบบคงที่หรือคล้ายกับการกีดกันการใช้ตัวเลขทึบแสงแบบเลอะเทอะ

โดยเฉพาะอย่างยิ่งกับตัวอย่างของคุณใน C ++ ตรวจสอบBoost.Chrono


1
+ อย่างน้อยที่สุดให้ใช้ประเภทสามัญที่มีตัวคูณสเกลหรือออฟเซ็ตจากพื้นฐานซึ่งคล้ายกับเขตเวลาที่มักเป็นอันตราย
JustinC

1

โดยส่วนตัวฉันจะไม่คิดว่าเป็นการฝึกฝนที่ดีในการสร้างค่าคงที่เว้นแต่จะต้องเป็นค่าคงที่ ถ้ามันจะอยู่ในหลาย ๆ ที่และมันถูกกำหนดไว้ที่ด้านบนของไฟล์สำหรับการแก้ไข / หรือการทดสอบจะมีประโยชน์อย่างแน่นอน

ถ้ามันเป็นเพราะมันอึดอัดใจที่จะพิมพ์? จากนั้นไม่

โดยส่วนตัวถ้าฉันได้รหัสของคนอื่นที่มีค่าคงที่โดยทั่วไปฉันคิดว่านี่เป็นสิ่งสำคัญของรหัส เช่น TCP เก็บรักษาตัวนับมีชีวิตจำนวนการเชื่อมต่อสูงสุดที่อนุญาต หากฉันต้องแก้ไขข้อบกพร่องฉันอาจต้องให้ความสนใจอย่างไม่จำเป็นกับมันและพยายามคิดออกว่าเหตุใด / การใช้ที่ใด


ฉันได้รับเรื่องตลก แต่ถ้าโปรแกรมเมอร์ของธนาคารต้องทำให้ค่าคงที่สำหรับทุกหมายเลขที่คุณสามารถถ่ายโอนซอฟต์แวร์ได้จะมีขนาดมหึมาไม่สามารถจัดการได้และช้า ฉันสามารถจินตนาการได้ว่ามันจะเป็นอย่างไรจินตนาการถูกบอกว่าจะใช้เวลา 3 วันทำการในการโอนเงินไปที่ .... โอ้พระเจ้าของฉันนั่นมัน !!!
Simon McLoughlin

ธนาคารของฉันใช้เวลา 3 วันในการโอนเงิน :(
ซ้ำ

1
ธนาคาร @MathewFoscarini ใช้โปรแกรมเมอร์ Excel พวกเขาไม่จำเป็น;)
Mateusz

@Simon ขึ้นอยู่กับภาษาและคอมไพเลอร์ค่าคงที่ควรได้รับการเพิ่มประสิทธิภาพให้เป็นรหัส ฉันเข้าใจประเด็นของคุณ แต่ค่าคงที่สามารถใช้งานได้ทุกที่โดยใช้ชื่อแทนหมายเลขเวทย์มนตร์จะช่วยให้สามารถอ่านรหัสได้
Steven

การอ่านที่น่าอึดอัดใจเป็นปัญหามากกว่าการพิมพ์ที่น่าอึดอัดใจ
Alb

0

เมื่อคุณคิดว่าทำไมคุณถึงเขียน "1 พันล้าน" แทนที่จะเป็น "1000000000" ในชื่อคำถามของคุณคุณจะรู้ว่าทำไมคำตอบคือใช่


0

อย่าสร้างค่าคงที่สำหรับตัวใหญ่ของคุณ คุณจะต้องมีค่าคงที่สำหรับแต่ละตัวอักษรซึ่งเป็น (ในความคิดของฉัน) เรื่องตลกที่สมบูรณ์ หากคุณต้องการทำให้ตัวอักษรของคุณชัดเจนขึ้นโดยปราศจากความช่วยเหลือจากสิ่งต่าง ๆ เช่นการเน้นไวยากรณ์คุณสามารถ (แม้ว่าฉันจะไม่) สร้างฟังก์ชันหรือมาโครเพื่อทำให้ชีวิตของคุณ "ง่ายขึ้น":

#define SPLIT3(x, y, z) x##y##z

int largeNumber1 = SPLIT3(123,456,789);
int largeNumber2 = 123456789;

0

ฉันจะทำสิ่งนี้:

const int Million = 1000 * 1000;
const int Billion = 1000 * Million;

หรือ

const int SciMega = 1000 * 1000; const int SciGiga = 1000 * SciMega;

เกี่ยวกับจำนวนนาโนวินาทีต่อวินาที: nano คือ "inverse" ของ giga

Kilo  Mega  Giga   etc.
10^3  10^6  10^9
Milli Micro Nano   etc.
10^-3 10^-6 10^-9

หมายเหตุ "Sci" - สำหรับวิทยาศาสตร์เช่นเดียวกับในคอมพิวเตอร์ความหมายของกิโลเมก้าเมก้า ฯลฯ มีความแตกต่าง: 1024 (2 ^ 10), 1024 * 1024 (2 ^ 20) ฯลฯ 2 เมกะไบต์ไม่ได้ 2,000,000 ไบต์ .

ผู้แสดงความคิดเห็นUPDATEชี้ให้เห็นว่ามีคำศัพท์พิเศษสำหรับ exponents แบบดิจิทัล 2: http://en.wikipedia.org/wiki/Mebibyte


"2 เมกะไบต์ไม่ได้ 2,000,000 ไบต์" ถามผู้ผลิตฮาร์ดดิสก์รายใดที่คุณต้องการ (ไม่ใช่ downvoter, btw.)
CVn

@michaelkjorling นี่เป็นคำถามการเขียนโปรแกรมไม่ใช่จริยธรรมทางธุรกิจหรือการตลาด ฉันเห็นด้วยเกี่ยวกับฮาร์ดไดรฟ์ แต่นั่นเป็นหัวข้ออื่น และอุ้มเกี่ยวกับการลงคะแนน!
Mr. TA

1
ที่จริงแล้ว 2 เมกะไบต์คือ 2,000,000 ไบต์ 2 Mebibytes คือ 2,097,152 bytes ดูen.wikipedia.org/wiki/Mebibyte
vy32

@ vy32 ขอบคุณไม่เคยได้ยินมาก่อน จะอัปเดตคำตอบของฉันเพื่อสะท้อนว่า
Mr. TA

@ Mr.TA ไม่มีปัญหา! เรากำลังทำงานอย่างหนักเพื่อนำวิทยาศาสตร์คอมพิวเตอร์มาปฏิบัติตามหน่วย SI! เข้าร่วมคลับ.
vy32
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.