+ private String describeSimSpeed(double speed)
+ {
+ CoreModelParameters coreModelParameters = debugTarget.getMachine().getCoreModelParameters();
+ // TODO hardcoding this seems not optimal
+ int ticksPerSecond = 1000000;
+
+ double simulTicksPerRealSecond = speed * ticksPerSecond;
+
+ // TODO internationalize
+ StringBuilder sb = new StringBuilder();
+ sb.append("Per second: ");
+ sb.append(formatNSignificantDigits(4, simulTicksPerRealSecond / coreModelParameters.wireTravelTime));
+ sb.append(" wire travel times; ");
+ sb.append(formatNSignificantDigits(4, simulTicksPerRealSecond / coreModelParameters.gateProcessTime));
+ sb.append(" gate process times; ");
+ sb.append(formatNSignificantDigits(4, simulTicksPerRealSecond / debugTarget.getMachine().getClock().getDelta() / 2));
+ sb.append(" clock cycles");
+ return sb.toString();
+ }
+
+ private static String formatNSignificantDigits(int digits, double d)
+ {
+ return new BigDecimal(d, new MathContext(digits)).toPlainString();
+ }
+